package org.xtext.fofo.parser.antlr.internal; 

import org.eclipse.xtext.*;
import org.eclipse.xtext.parser.*;
import org.eclipse.xtext.parser.impl.*;
import org.eclipse.emf.ecore.util.EcoreUtil;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.xtext.parser.antlr.AbstractInternalAntlrParser;
import org.eclipse.xtext.parser.antlr.XtextTokenStream;
import org.eclipse.xtext.parser.antlr.XtextTokenStream.HiddenTokens;
import org.eclipse.xtext.parser.antlr.AntlrDatatypeRuleToken;
import org.xtext.fofo.services.ApricotGrammarAccess;



import org.antlr.runtime.*;
import java.util.Stack;
import java.util.List;
import java.util.ArrayList;
import java.util.Map;
import java.util.HashMap;
@SuppressWarnings("all")
public class InternalApricotParser extends AbstractInternalAntlrParser {
    public static final String[] tokenNames = new String[] {
        "<invalid>", "<EOR>", "<DOWN>", "<UP>", "RULE_ID", "RULE_AMOUNT_GEONE", "RULE_AMOUNT_ONE_OR_ZERO", "RULE_ASYACTIONS", "RULE_CLOCK", "RULE_FLOATING_POINT_LITERAL", "RULE_CHARACTER_LITERAL", "RULE_STRING_LITERAL", "RULE_HEX_LITERAL", "RULE_OCTAL_LITERAL", "RULE_DECIMAL_LITERAL", "RULE_HEX_DIGIT", "RULE_INTEGER_TYPE_SUFFIX", "RULE_EXPONENT", "RULE_FLOAT_TYPE_SUFFIX", "RULE_ESCAPE_SEQUENCE", "RULE_UNICODE_ESCAPE", "RULE_OCTAL_ESCAPE", "RULE_INT", "RULE_STRING", "RULE_ML_COMMENT", "RULE_SL_COMMENT", "RULE_WS", "RULE_ANY_OTHER", "'package'", "';'", "'import'", "'.*'", "'.'", "'public'", "'private'", "'Constant'", "'Native'", "'void'", "'int'", "'real'", "'boolean'", "'String'", "'Interval'", "'Int'", "'Real'", "'interface'", "'extends'", "'{'", "'}'", "'class'", "'implements'", "'='", "'('", "','", "')'", "'return'", "'Requires'", "'['", "']'", "':'", "'|'", "'Condition'", "'Composition'", "'Start'", "'Discrete'", "'Constraint'", "'Invariant'", "'+='", "'-='", "'*='", "'/='", "'&='", "'|='", "'^='", "'%='", "'?'", "'or'", "'and'", "'xor'", "'=='", "'!='", "'instanceof'", "'<'", "'<='", "'>'", "'>='", "'in'", "'||'", "'~'", "'+'", "'-'", "'*'", "'/'", "'%'", "'++'", "'--'", "'!'", "'this'", "'super'", "'at'", "'(!)'", "'(?)'", "'Inf'", "'null'", "'true'", "'false'", "'dot'", "'Equation'", "'Continuous'", "'sqrt'", "'sin'", "'cos'", "'tan'", "'cot'", "'sec'", "'csc'", "'round'", "'floor'", "'ceil'", "'div'", "'fld'", "'rem'", "'mod'", "'gcd'", "'lcm'", "'abs'", "'sign'", "'root'", "'hypot'", "'pow'", "'exp'", "'log'", "'erf'", "'gamma'", "'max'", "'min'", "'pause'", "'size'", "'if'", "'else'", "'for'", "'break'", "'continue'", "'while'", "'Init'", "'new'", "'[]'"
    };
    public static final int RULE_ID=4;
    public static final int T__29=29;
    public static final int T__28=28;
    public static final int RULE_ANY_OTHER=27;
    public static final int EOF=-1;
    public static final int T__93=93;
    public static final int T__94=94;
    public static final int T__91=91;
    public static final int T__92=92;
    public static final int T__90=90;
    public static final int RULE_DECIMAL_LITERAL=14;
    public static final int RULE_HEX_LITERAL=12;
    public static final int RULE_OCTAL_LITERAL=13;
    public static final int T__99=99;
    public static final int T__98=98;
    public static final int RULE_CHARACTER_LITERAL=10;
    public static final int T__97=97;
    public static final int T__96=96;
    public static final int T__95=95;
    public static final int T__139=139;
    public static final int T__138=138;
    public static final int T__137=137;
    public static final int T__136=136;
    public static final int T__80=80;
    public static final int T__81=81;
    public static final int T__82=82;
    public static final int T__83=83;
    public static final int RULE_HEX_DIGIT=15;
    public static final int T__141=141;
    public static final int T__85=85;
    public static final int T__142=142;
    public static final int T__84=84;
    public static final int T__87=87;
    public static final int T__140=140;
    public static final int T__86=86;
    public static final int T__145=145;
    public static final int T__89=89;
    public static final int T__146=146;
    public static final int T__88=88;
    public static final int RULE_ML_COMMENT=24;
    public static final int T__143=143;
    public static final int T__144=144;
    public static final int T__126=126;
    public static final int T__125=125;
    public static final int T__128=128;
    public static final int RULE_STRING=23;
    public static final int T__127=127;
    public static final int T__71=71;
    public static final int T__129=129;
    public static final int T__72=72;
    public static final int T__70=70;
    public static final int RULE_EXPONENT=17;
    public static final int T__76=76;
    public static final int T__75=75;
    public static final int T__130=130;
    public static final int T__74=74;
    public static final int T__131=131;
    public static final int T__73=73;
    public static final int RULE_ASYACTIONS=7;
    public static final int T__132=132;
    public static final int T__133=133;
    public static final int T__79=79;
    public static final int T__134=134;
    public static final int T__78=78;
    public static final int T__135=135;
    public static final int T__77=77;
    public static final int T__68=68;
    public static final int T__69=69;
    public static final int T__66=66;
    public static final int T__67=67;
    public static final int T__64=64;
    public static final int T__65=65;
    public static final int T__62=62;
    public static final int T__63=63;
    public static final int RULE_OCTAL_ESCAPE=21;
    public static final int RULE_ESCAPE_SEQUENCE=19;
    public static final int RULE_AMOUNT_ONE_OR_ZERO=6;
    public static final int T__118=118;
    public static final int T__119=119;
    public static final int T__116=116;
    public static final int T__117=117;
    public static final int T__114=114;
    public static final int T__115=115;
    public static final int T__124=124;
    public static final int T__123=123;
    public static final int T__122=122;
    public static final int T__121=121;
    public static final int T__120=120;
    public static final int T__61=61;
    public static final int T__60=60;
    public static final int T__55=55;
    public static final int T__56=56;
    public static final int T__57=57;
    public static final int T__58=58;
    public static final int T__51=51;
    public static final int T__52=52;
    public static final int T__53=53;
    public static final int RULE_STRING_LITERAL=11;
    public static final int T__54=54;
    public static final int T__107=107;
    public static final int T__108=108;
    public static final int T__109=109;
    public static final int RULE_AMOUNT_GEONE=5;
    public static final int T__59=59;
    public static final int T__103=103;
    public static final int T__104=104;
    public static final int T__105=105;
    public static final int T__106=106;
    public static final int T__111=111;
    public static final int T__110=110;
    public static final int RULE_INT=22;
    public static final int RULE_UNICODE_ESCAPE=20;
    public static final int T__113=113;
    public static final int T__112=112;
    public static final int T__50=50;
    public static final int T__42=42;
    public static final int T__43=43;
    public static final int T__40=40;
    public static final int T__41=41;
    public static final int T__46=46;
    public static final int RULE_CLOCK=8;
    public static final int T__47=47;
    public static final int T__44=44;
    public static final int T__45=45;
    public static final int T__48=48;
    public static final int T__49=49;
    public static final int T__102=102;
    public static final int T__101=101;
    public static final int T__100=100;
    public static final int RULE_SL_COMMENT=25;
    public static final int T__30=30;
    public static final int T__31=31;
    public static final int T__32=32;
    public static final int T__33=33;
    public static final int T__34=34;
    public static final int T__35=35;
    public static final int T__36=36;
    public static final int RULE_FLOAT_TYPE_SUFFIX=18;
    public static final int T__37=37;
    public static final int T__38=38;
    public static final int RULE_INTEGER_TYPE_SUFFIX=16;
    public static final int T__39=39;
    public static final int RULE_FLOATING_POINT_LITERAL=9;
    public static final int RULE_WS=26;

    // delegates
    // delegators


        public InternalApricotParser(TokenStream input) {
            this(input, new RecognizerSharedState());
        }
        public InternalApricotParser(TokenStream input, RecognizerSharedState state) {
            super(input, state);
             
        }
        

    public String[] getTokenNames() { return InternalApricotParser.tokenNames; }
    public String getGrammarFileName() { return "../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g"; }



     	private ApricotGrammarAccess grammarAccess;
     	
        public InternalApricotParser(TokenStream input, ApricotGrammarAccess grammarAccess) {
            this(input);
            this.grammarAccess = grammarAccess;
            registerRules(grammarAccess.getGrammar());
        }
        
        @Override
        protected String getFirstRuleName() {
        	return "PackageDeclaration";	
       	}
       	
       	@Override
       	protected ApricotGrammarAccess getGrammarAccess() {
       		return grammarAccess;
       	}



    // $ANTLR start "entryRulePackageDeclaration"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:67:1: entryRulePackageDeclaration returns [EObject current=null] : iv_rulePackageDeclaration= rulePackageDeclaration EOF ;
    public final EObject entryRulePackageDeclaration() throws RecognitionException {
        EObject current = null;

        EObject iv_rulePackageDeclaration = null;


        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:68:2: (iv_rulePackageDeclaration= rulePackageDeclaration EOF )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:69:2: iv_rulePackageDeclaration= rulePackageDeclaration EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getPackageDeclarationRule()); 
            }
            pushFollow(FOLLOW_rulePackageDeclaration_in_entryRulePackageDeclaration75);
            iv_rulePackageDeclaration=rulePackageDeclaration();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_rulePackageDeclaration; 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRulePackageDeclaration85); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRulePackageDeclaration"


    // $ANTLR start "rulePackageDeclaration"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:76:1: rulePackageDeclaration returns [EObject current=null] : (otherlv_0= 'package' ( (lv_name_1_0= ruleQualifiedName ) ) otherlv_2= ';' ( (lv_imports_3_0= ruleImport ) )* ( (lv_elements_4_0= ruleRefType ) )* ) ;
    public final EObject rulePackageDeclaration() throws RecognitionException {
        EObject current = null;

        Token otherlv_0=null;
        Token otherlv_2=null;
        AntlrDatatypeRuleToken lv_name_1_0 = null;

        EObject lv_imports_3_0 = null;

        EObject lv_elements_4_0 = null;


         enterRule(); 
            
        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:79:28: ( (otherlv_0= 'package' ( (lv_name_1_0= ruleQualifiedName ) ) otherlv_2= ';' ( (lv_imports_3_0= ruleImport ) )* ( (lv_elements_4_0= ruleRefType ) )* ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:80:1: (otherlv_0= 'package' ( (lv_name_1_0= ruleQualifiedName ) ) otherlv_2= ';' ( (lv_imports_3_0= ruleImport ) )* ( (lv_elements_4_0= ruleRefType ) )* )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:80:1: (otherlv_0= 'package' ( (lv_name_1_0= ruleQualifiedName ) ) otherlv_2= ';' ( (lv_imports_3_0= ruleImport ) )* ( (lv_elements_4_0= ruleRefType ) )* )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:80:3: otherlv_0= 'package' ( (lv_name_1_0= ruleQualifiedName ) ) otherlv_2= ';' ( (lv_imports_3_0= ruleImport ) )* ( (lv_elements_4_0= ruleRefType ) )*
            {
            otherlv_0=(Token)match(input,28,FOLLOW_28_in_rulePackageDeclaration122); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_0, grammarAccess.getPackageDeclarationAccess().getPackageKeyword_0());
                  
            }
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:84:1: ( (lv_name_1_0= ruleQualifiedName ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:85:1: (lv_name_1_0= ruleQualifiedName )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:85:1: (lv_name_1_0= ruleQualifiedName )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:86:3: lv_name_1_0= ruleQualifiedName
            {
            if ( state.backtracking==0 ) {
               
              	        newCompositeNode(grammarAccess.getPackageDeclarationAccess().getNameQualifiedNameParserRuleCall_1_0()); 
              	    
            }
            pushFollow(FOLLOW_ruleQualifiedName_in_rulePackageDeclaration143);
            lv_name_1_0=ruleQualifiedName();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              	        if (current==null) {
              	            current = createModelElementForParent(grammarAccess.getPackageDeclarationRule());
              	        }
                     		set(
                     			current, 
                     			"name",
                      		lv_name_1_0, 
                      		"QualifiedName");
              	        afterParserOrEnumRuleCall();
              	    
            }

            }


            }

            otherlv_2=(Token)match(input,29,FOLLOW_29_in_rulePackageDeclaration155); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_2, grammarAccess.getPackageDeclarationAccess().getSemicolonKeyword_2());
                  
            }
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:106:1: ( (lv_imports_3_0= ruleImport ) )*
            loop1:
            do {
                int alt1=2;
                int LA1_0 = input.LA(1);

                if ( (LA1_0==30) ) {
                    alt1=1;
                }


                switch (alt1) {
            	case 1 :
            	    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:107:1: (lv_imports_3_0= ruleImport )
            	    {
            	    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:107:1: (lv_imports_3_0= ruleImport )
            	    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:108:3: lv_imports_3_0= ruleImport
            	    {
            	    if ( state.backtracking==0 ) {
            	       
            	      	        newCompositeNode(grammarAccess.getPackageDeclarationAccess().getImportsImportParserRuleCall_3_0()); 
            	      	    
            	    }
            	    pushFollow(FOLLOW_ruleImport_in_rulePackageDeclaration176);
            	    lv_imports_3_0=ruleImport();

            	    state._fsp--;
            	    if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      	        if (current==null) {
            	      	            current = createModelElementForParent(grammarAccess.getPackageDeclarationRule());
            	      	        }
            	             		add(
            	             			current, 
            	             			"imports",
            	              		lv_imports_3_0, 
            	              		"Import");
            	      	        afterParserOrEnumRuleCall();
            	      	    
            	    }

            	    }


            	    }
            	    break;

            	default :
            	    break loop1;
                }
            } while (true);

            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:124:3: ( (lv_elements_4_0= ruleRefType ) )*
            loop2:
            do {
                int alt2=2;
                int LA2_0 = input.LA(1);

                if ( ((LA2_0>=33 && LA2_0<=34)||LA2_0==45||LA2_0==49) ) {
                    alt2=1;
                }


                switch (alt2) {
            	case 1 :
            	    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:125:1: (lv_elements_4_0= ruleRefType )
            	    {
            	    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:125:1: (lv_elements_4_0= ruleRefType )
            	    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:126:3: lv_elements_4_0= ruleRefType
            	    {
            	    if ( state.backtracking==0 ) {
            	       
            	      	        newCompositeNode(grammarAccess.getPackageDeclarationAccess().getElementsRefTypeParserRuleCall_4_0()); 
            	      	    
            	    }
            	    pushFollow(FOLLOW_ruleRefType_in_rulePackageDeclaration198);
            	    lv_elements_4_0=ruleRefType();

            	    state._fsp--;
            	    if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      	        if (current==null) {
            	      	            current = createModelElementForParent(grammarAccess.getPackageDeclarationRule());
            	      	        }
            	             		add(
            	             			current, 
            	             			"elements",
            	              		lv_elements_4_0, 
            	              		"RefType");
            	      	        afterParserOrEnumRuleCall();
            	      	    
            	    }

            	    }


            	    }
            	    break;

            	default :
            	    break loop2;
                }
            } while (true);


            }


            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "rulePackageDeclaration"


    // $ANTLR start "entryRuleImport"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:150:1: entryRuleImport returns [EObject current=null] : iv_ruleImport= ruleImport EOF ;
    public final EObject entryRuleImport() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleImport = null;


        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:151:2: (iv_ruleImport= ruleImport EOF )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:152:2: iv_ruleImport= ruleImport EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getImportRule()); 
            }
            pushFollow(FOLLOW_ruleImport_in_entryRuleImport235);
            iv_ruleImport=ruleImport();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleImport; 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRuleImport245); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleImport"


    // $ANTLR start "ruleImport"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:159:1: ruleImport returns [EObject current=null] : (otherlv_0= 'import' ( (lv_importedNamespace_1_0= ruleQualifiedNameWithWildcard ) ) otherlv_2= ';' ) ;
    public final EObject ruleImport() throws RecognitionException {
        EObject current = null;

        Token otherlv_0=null;
        Token otherlv_2=null;
        AntlrDatatypeRuleToken lv_importedNamespace_1_0 = null;


         enterRule(); 
            
        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:162:28: ( (otherlv_0= 'import' ( (lv_importedNamespace_1_0= ruleQualifiedNameWithWildcard ) ) otherlv_2= ';' ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:163:1: (otherlv_0= 'import' ( (lv_importedNamespace_1_0= ruleQualifiedNameWithWildcard ) ) otherlv_2= ';' )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:163:1: (otherlv_0= 'import' ( (lv_importedNamespace_1_0= ruleQualifiedNameWithWildcard ) ) otherlv_2= ';' )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:163:3: otherlv_0= 'import' ( (lv_importedNamespace_1_0= ruleQualifiedNameWithWildcard ) ) otherlv_2= ';'
            {
            otherlv_0=(Token)match(input,30,FOLLOW_30_in_ruleImport282); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_0, grammarAccess.getImportAccess().getImportKeyword_0());
                  
            }
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:167:1: ( (lv_importedNamespace_1_0= ruleQualifiedNameWithWildcard ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:168:1: (lv_importedNamespace_1_0= ruleQualifiedNameWithWildcard )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:168:1: (lv_importedNamespace_1_0= ruleQualifiedNameWithWildcard )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:169:3: lv_importedNamespace_1_0= ruleQualifiedNameWithWildcard
            {
            if ( state.backtracking==0 ) {
               
              	        newCompositeNode(grammarAccess.getImportAccess().getImportedNamespaceQualifiedNameWithWildcardParserRuleCall_1_0()); 
              	    
            }
            pushFollow(FOLLOW_ruleQualifiedNameWithWildcard_in_ruleImport303);
            lv_importedNamespace_1_0=ruleQualifiedNameWithWildcard();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              	        if (current==null) {
              	            current = createModelElementForParent(grammarAccess.getImportRule());
              	        }
                     		set(
                     			current, 
                     			"importedNamespace",
                      		lv_importedNamespace_1_0, 
                      		"QualifiedNameWithWildcard");
              	        afterParserOrEnumRuleCall();
              	    
            }

            }


            }

            otherlv_2=(Token)match(input,29,FOLLOW_29_in_ruleImport315); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_2, grammarAccess.getImportAccess().getSemicolonKeyword_2());
                  
            }

            }


            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleImport"


    // $ANTLR start "entryRuleQualifiedNameWithWildcard"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:197:1: entryRuleQualifiedNameWithWildcard returns [String current=null] : iv_ruleQualifiedNameWithWildcard= ruleQualifiedNameWithWildcard EOF ;
    public final String entryRuleQualifiedNameWithWildcard() throws RecognitionException {
        String current = null;

        AntlrDatatypeRuleToken iv_ruleQualifiedNameWithWildcard = null;


        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:198:2: (iv_ruleQualifiedNameWithWildcard= ruleQualifiedNameWithWildcard EOF )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:199:2: iv_ruleQualifiedNameWithWildcard= ruleQualifiedNameWithWildcard EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getQualifiedNameWithWildcardRule()); 
            }
            pushFollow(FOLLOW_ruleQualifiedNameWithWildcard_in_entryRuleQualifiedNameWithWildcard352);
            iv_ruleQualifiedNameWithWildcard=ruleQualifiedNameWithWildcard();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleQualifiedNameWithWildcard.getText(); 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRuleQualifiedNameWithWildcard363); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleQualifiedNameWithWildcard"


    // $ANTLR start "ruleQualifiedNameWithWildcard"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:206:1: ruleQualifiedNameWithWildcard returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : (this_QualifiedName_0= ruleQualifiedName (kw= '.*' )? ) ;
    public final AntlrDatatypeRuleToken ruleQualifiedNameWithWildcard() throws RecognitionException {
        AntlrDatatypeRuleToken current = new AntlrDatatypeRuleToken();

        Token kw=null;
        AntlrDatatypeRuleToken this_QualifiedName_0 = null;


         enterRule(); 
            
        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:209:28: ( (this_QualifiedName_0= ruleQualifiedName (kw= '.*' )? ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:210:1: (this_QualifiedName_0= ruleQualifiedName (kw= '.*' )? )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:210:1: (this_QualifiedName_0= ruleQualifiedName (kw= '.*' )? )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:211:5: this_QualifiedName_0= ruleQualifiedName (kw= '.*' )?
            {
            if ( state.backtracking==0 ) {
               
                      newCompositeNode(grammarAccess.getQualifiedNameWithWildcardAccess().getQualifiedNameParserRuleCall_0()); 
                  
            }
            pushFollow(FOLLOW_ruleQualifiedName_in_ruleQualifiedNameWithWildcard410);
            this_QualifiedName_0=ruleQualifiedName();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              		current.merge(this_QualifiedName_0);
                  
            }
            if ( state.backtracking==0 ) {
               
                      afterParserOrEnumRuleCall();
                  
            }
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:221:1: (kw= '.*' )?
            int alt3=2;
            int LA3_0 = input.LA(1);

            if ( (LA3_0==31) ) {
                alt3=1;
            }
            switch (alt3) {
                case 1 :
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:222:2: kw= '.*'
                    {
                    kw=(Token)match(input,31,FOLLOW_31_in_ruleQualifiedNameWithWildcard429); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                              current.merge(kw);
                              newLeafNode(kw, grammarAccess.getQualifiedNameWithWildcardAccess().getFullStopAsteriskKeyword_1()); 
                          
                    }

                    }
                    break;

            }


            }


            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleQualifiedNameWithWildcard"


    // $ANTLR start "entryRuleQualifiedName"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:235:1: entryRuleQualifiedName returns [String current=null] : iv_ruleQualifiedName= ruleQualifiedName EOF ;
    public final String entryRuleQualifiedName() throws RecognitionException {
        String current = null;

        AntlrDatatypeRuleToken iv_ruleQualifiedName = null;


        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:236:2: (iv_ruleQualifiedName= ruleQualifiedName EOF )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:237:2: iv_ruleQualifiedName= ruleQualifiedName EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getQualifiedNameRule()); 
            }
            pushFollow(FOLLOW_ruleQualifiedName_in_entryRuleQualifiedName472);
            iv_ruleQualifiedName=ruleQualifiedName();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleQualifiedName.getText(); 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRuleQualifiedName483); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleQualifiedName"


    // $ANTLR start "ruleQualifiedName"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:244:1: ruleQualifiedName returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : (this_ID_0= RULE_ID (kw= '.' this_ID_2= RULE_ID )* ) ;
    public final AntlrDatatypeRuleToken ruleQualifiedName() throws RecognitionException {
        AntlrDatatypeRuleToken current = new AntlrDatatypeRuleToken();

        Token this_ID_0=null;
        Token kw=null;
        Token this_ID_2=null;

         enterRule(); 
            
        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:247:28: ( (this_ID_0= RULE_ID (kw= '.' this_ID_2= RULE_ID )* ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:248:1: (this_ID_0= RULE_ID (kw= '.' this_ID_2= RULE_ID )* )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:248:1: (this_ID_0= RULE_ID (kw= '.' this_ID_2= RULE_ID )* )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:248:6: this_ID_0= RULE_ID (kw= '.' this_ID_2= RULE_ID )*
            {
            this_ID_0=(Token)match(input,RULE_ID,FOLLOW_RULE_ID_in_ruleQualifiedName523); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              		current.merge(this_ID_0);
                  
            }
            if ( state.backtracking==0 ) {
               
                  newLeafNode(this_ID_0, grammarAccess.getQualifiedNameAccess().getIDTerminalRuleCall_0()); 
                  
            }
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:255:1: (kw= '.' this_ID_2= RULE_ID )*
            loop4:
            do {
                int alt4=2;
                int LA4_0 = input.LA(1);

                if ( (LA4_0==32) ) {
                    alt4=1;
                }


                switch (alt4) {
            	case 1 :
            	    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:256:2: kw= '.' this_ID_2= RULE_ID
            	    {
            	    kw=(Token)match(input,32,FOLLOW_32_in_ruleQualifiedName542); if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	              current.merge(kw);
            	              newLeafNode(kw, grammarAccess.getQualifiedNameAccess().getFullStopKeyword_1_0()); 
            	          
            	    }
            	    this_ID_2=(Token)match(input,RULE_ID,FOLLOW_RULE_ID_in_ruleQualifiedName557); if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      		current.merge(this_ID_2);
            	          
            	    }
            	    if ( state.backtracking==0 ) {
            	       
            	          newLeafNode(this_ID_2, grammarAccess.getQualifiedNameAccess().getIDTerminalRuleCall_1_1()); 
            	          
            	    }

            	    }
            	    break;

            	default :
            	    break loop4;
                }
            } while (true);


            }


            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleQualifiedName"


    // $ANTLR start "entryRuleModifier"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:276:1: entryRuleModifier returns [String current=null] : iv_ruleModifier= ruleModifier EOF ;
    public final String entryRuleModifier() throws RecognitionException {
        String current = null;

        AntlrDatatypeRuleToken iv_ruleModifier = null;


        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:277:2: (iv_ruleModifier= ruleModifier EOF )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:278:2: iv_ruleModifier= ruleModifier EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getModifierRule()); 
            }
            pushFollow(FOLLOW_ruleModifier_in_entryRuleModifier605);
            iv_ruleModifier=ruleModifier();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleModifier.getText(); 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRuleModifier616); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleModifier"


    // $ANTLR start "ruleModifier"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:285:1: ruleModifier returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : (kw= 'public' | kw= 'private' ) ;
    public final AntlrDatatypeRuleToken ruleModifier() throws RecognitionException {
        AntlrDatatypeRuleToken current = new AntlrDatatypeRuleToken();

        Token kw=null;

         enterRule(); 
            
        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:288:28: ( (kw= 'public' | kw= 'private' ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:289:1: (kw= 'public' | kw= 'private' )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:289:1: (kw= 'public' | kw= 'private' )
            int alt5=2;
            int LA5_0 = input.LA(1);

            if ( (LA5_0==33) ) {
                alt5=1;
            }
            else if ( (LA5_0==34) ) {
                alt5=2;
            }
            else {
                if (state.backtracking>0) {state.failed=true; return current;}
                NoViableAltException nvae =
                    new NoViableAltException("", 5, 0, input);

                throw nvae;
            }
            switch (alt5) {
                case 1 :
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:290:2: kw= 'public'
                    {
                    kw=(Token)match(input,33,FOLLOW_33_in_ruleModifier654); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                              current.merge(kw);
                              newLeafNode(kw, grammarAccess.getModifierAccess().getPublicKeyword_0()); 
                          
                    }

                    }
                    break;
                case 2 :
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:297:2: kw= 'private'
                    {
                    kw=(Token)match(input,34,FOLLOW_34_in_ruleModifier673); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                              current.merge(kw);
                              newLeafNode(kw, grammarAccess.getModifierAccess().getPrivateKeyword_1()); 
                          
                    }

                    }
                    break;

            }


            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleModifier"


    // $ANTLR start "entryRuleVARIABLE_MODIFIER"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:310:1: entryRuleVARIABLE_MODIFIER returns [String current=null] : iv_ruleVARIABLE_MODIFIER= ruleVARIABLE_MODIFIER EOF ;
    public final String entryRuleVARIABLE_MODIFIER() throws RecognitionException {
        String current = null;

        AntlrDatatypeRuleToken iv_ruleVARIABLE_MODIFIER = null;


        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:311:2: (iv_ruleVARIABLE_MODIFIER= ruleVARIABLE_MODIFIER EOF )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:312:2: iv_ruleVARIABLE_MODIFIER= ruleVARIABLE_MODIFIER EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getVARIABLE_MODIFIERRule()); 
            }
            pushFollow(FOLLOW_ruleVARIABLE_MODIFIER_in_entryRuleVARIABLE_MODIFIER714);
            iv_ruleVARIABLE_MODIFIER=ruleVARIABLE_MODIFIER();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleVARIABLE_MODIFIER.getText(); 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRuleVARIABLE_MODIFIER725); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleVARIABLE_MODIFIER"


    // $ANTLR start "ruleVARIABLE_MODIFIER"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:319:1: ruleVARIABLE_MODIFIER returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : kw= 'Constant' ;
    public final AntlrDatatypeRuleToken ruleVARIABLE_MODIFIER() throws RecognitionException {
        AntlrDatatypeRuleToken current = new AntlrDatatypeRuleToken();

        Token kw=null;

         enterRule(); 
            
        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:322:28: (kw= 'Constant' )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:324:2: kw= 'Constant'
            {
            kw=(Token)match(input,35,FOLLOW_35_in_ruleVARIABLE_MODIFIER762); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                      current.merge(kw);
                      newLeafNode(kw, grammarAccess.getVARIABLE_MODIFIERAccess().getConstantKeyword()); 
                  
            }

            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleVARIABLE_MODIFIER"


    // $ANTLR start "entryRuleBuiltInModifier"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:337:1: entryRuleBuiltInModifier returns [String current=null] : iv_ruleBuiltInModifier= ruleBuiltInModifier EOF ;
    public final String entryRuleBuiltInModifier() throws RecognitionException {
        String current = null;

        AntlrDatatypeRuleToken iv_ruleBuiltInModifier = null;


        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:338:2: (iv_ruleBuiltInModifier= ruleBuiltInModifier EOF )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:339:2: iv_ruleBuiltInModifier= ruleBuiltInModifier EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getBuiltInModifierRule()); 
            }
            pushFollow(FOLLOW_ruleBuiltInModifier_in_entryRuleBuiltInModifier802);
            iv_ruleBuiltInModifier=ruleBuiltInModifier();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleBuiltInModifier.getText(); 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRuleBuiltInModifier813); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleBuiltInModifier"


    // $ANTLR start "ruleBuiltInModifier"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:346:1: ruleBuiltInModifier returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : kw= 'Native' ;
    public final AntlrDatatypeRuleToken ruleBuiltInModifier() throws RecognitionException {
        AntlrDatatypeRuleToken current = new AntlrDatatypeRuleToken();

        Token kw=null;

         enterRule(); 
            
        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:349:28: (kw= 'Native' )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:351:2: kw= 'Native'
            {
            kw=(Token)match(input,36,FOLLOW_36_in_ruleBuiltInModifier850); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                      current.merge(kw);
                      newLeafNode(kw, grammarAccess.getBuiltInModifierAccess().getNativeKeyword()); 
                  
            }

            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleBuiltInModifier"


    // $ANTLR start "entryRuleRefType"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:364:1: entryRuleRefType returns [EObject current=null] : iv_ruleRefType= ruleRefType EOF ;
    public final EObject entryRuleRefType() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleRefType = null;


        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:365:2: (iv_ruleRefType= ruleRefType EOF )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:366:2: iv_ruleRefType= ruleRefType EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getRefTypeRule()); 
            }
            pushFollow(FOLLOW_ruleRefType_in_entryRuleRefType889);
            iv_ruleRefType=ruleRefType();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleRefType; 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRuleRefType899); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleRefType"


    // $ANTLR start "ruleRefType"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:373:1: ruleRefType returns [EObject current=null] : (this_Class_0= ruleClass | this_Interface_1= ruleInterface ) ;
    public final EObject ruleRefType() throws RecognitionException {
        EObject current = null;

        EObject this_Class_0 = null;

        EObject this_Interface_1 = null;


         enterRule(); 
            
        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:376:28: ( (this_Class_0= ruleClass | this_Interface_1= ruleInterface ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:377:1: (this_Class_0= ruleClass | this_Interface_1= ruleInterface )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:377:1: (this_Class_0= ruleClass | this_Interface_1= ruleInterface )
            int alt6=2;
            switch ( input.LA(1) ) {
            case 33:
                {
                int LA6_1 = input.LA(2);

                if ( (LA6_1==45) ) {
                    alt6=2;
                }
                else if ( (LA6_1==49) ) {
                    alt6=1;
                }
                else {
                    if (state.backtracking>0) {state.failed=true; return current;}
                    NoViableAltException nvae =
                        new NoViableAltException("", 6, 1, input);

                    throw nvae;
                }
                }
                break;
            case 34:
                {
                int LA6_2 = input.LA(2);

                if ( (LA6_2==49) ) {
                    alt6=1;
                }
                else if ( (LA6_2==45) ) {
                    alt6=2;
                }
                else {
                    if (state.backtracking>0) {state.failed=true; return current;}
                    NoViableAltException nvae =
                        new NoViableAltException("", 6, 2, input);

                    throw nvae;
                }
                }
                break;
            case 49:
                {
                alt6=1;
                }
                break;
            case 45:
                {
                alt6=2;
                }
                break;
            default:
                if (state.backtracking>0) {state.failed=true; return current;}
                NoViableAltException nvae =
                    new NoViableAltException("", 6, 0, input);

                throw nvae;
            }

            switch (alt6) {
                case 1 :
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:378:5: this_Class_0= ruleClass
                    {
                    if ( state.backtracking==0 ) {
                       
                              newCompositeNode(grammarAccess.getRefTypeAccess().getClassParserRuleCall_0()); 
                          
                    }
                    pushFollow(FOLLOW_ruleClass_in_ruleRefType946);
                    this_Class_0=ruleClass();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {
                       
                              current = this_Class_0; 
                              afterParserOrEnumRuleCall();
                          
                    }

                    }
                    break;
                case 2 :
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:388:5: this_Interface_1= ruleInterface
                    {
                    if ( state.backtracking==0 ) {
                       
                              newCompositeNode(grammarAccess.getRefTypeAccess().getInterfaceParserRuleCall_1()); 
                          
                    }
                    pushFollow(FOLLOW_ruleInterface_in_ruleRefType973);
                    this_Interface_1=ruleInterface();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {
                       
                              current = this_Interface_1; 
                              afterParserOrEnumRuleCall();
                          
                    }

                    }
                    break;

            }


            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleRefType"


    // $ANTLR start "entryRuleNonRefType"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:404:1: entryRuleNonRefType returns [EObject current=null] : iv_ruleNonRefType= ruleNonRefType EOF ;
    public final EObject entryRuleNonRefType() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleNonRefType = null;


        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:405:2: (iv_ruleNonRefType= ruleNonRefType EOF )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:406:2: iv_ruleNonRefType= ruleNonRefType EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getNonRefTypeRule()); 
            }
            pushFollow(FOLLOW_ruleNonRefType_in_entryRuleNonRefType1008);
            iv_ruleNonRefType=ruleNonRefType();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleNonRefType; 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRuleNonRefType1018); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleNonRefType"


    // $ANTLR start "ruleNonRefType"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:413:1: ruleNonRefType returns [EObject current=null] : (this_BasicType_0= ruleBasicType | this_MathType_1= ruleMathType ) ;
    public final EObject ruleNonRefType() throws RecognitionException {
        EObject current = null;

        EObject this_BasicType_0 = null;

        EObject this_MathType_1 = null;


         enterRule(); 
            
        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:416:28: ( (this_BasicType_0= ruleBasicType | this_MathType_1= ruleMathType ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:417:1: (this_BasicType_0= ruleBasicType | this_MathType_1= ruleMathType )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:417:1: (this_BasicType_0= ruleBasicType | this_MathType_1= ruleMathType )
            int alt7=2;
            int LA7_0 = input.LA(1);

            if ( ((LA7_0>=37 && LA7_0<=42)) ) {
                alt7=1;
            }
            else if ( ((LA7_0>=43 && LA7_0<=44)) ) {
                alt7=2;
            }
            else {
                if (state.backtracking>0) {state.failed=true; return current;}
                NoViableAltException nvae =
                    new NoViableAltException("", 7, 0, input);

                throw nvae;
            }
            switch (alt7) {
                case 1 :
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:418:5: this_BasicType_0= ruleBasicType
                    {
                    if ( state.backtracking==0 ) {
                       
                              newCompositeNode(grammarAccess.getNonRefTypeAccess().getBasicTypeParserRuleCall_0()); 
                          
                    }
                    pushFollow(FOLLOW_ruleBasicType_in_ruleNonRefType1065);
                    this_BasicType_0=ruleBasicType();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {
                       
                              current = this_BasicType_0; 
                              afterParserOrEnumRuleCall();
                          
                    }

                    }
                    break;
                case 2 :
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:428:5: this_MathType_1= ruleMathType
                    {
                    if ( state.backtracking==0 ) {
                       
                              newCompositeNode(grammarAccess.getNonRefTypeAccess().getMathTypeParserRuleCall_1()); 
                          
                    }
                    pushFollow(FOLLOW_ruleMathType_in_ruleNonRefType1092);
                    this_MathType_1=ruleMathType();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {
                       
                              current = this_MathType_1; 
                              afterParserOrEnumRuleCall();
                          
                    }

                    }
                    break;

            }


            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleNonRefType"


    // $ANTLR start "entryRuleBasicType"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:444:1: entryRuleBasicType returns [EObject current=null] : iv_ruleBasicType= ruleBasicType EOF ;
    public final EObject entryRuleBasicType() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleBasicType = null;


        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:445:2: (iv_ruleBasicType= ruleBasicType EOF )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:446:2: iv_ruleBasicType= ruleBasicType EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getBasicTypeRule()); 
            }
            pushFollow(FOLLOW_ruleBasicType_in_entryRuleBasicType1127);
            iv_ruleBasicType=ruleBasicType();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleBasicType; 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRuleBasicType1137); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleBasicType"


    // $ANTLR start "ruleBasicType"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:453:1: ruleBasicType returns [EObject current=null] : ( ( (lv_BT_0_1= 'void' | lv_BT_0_2= 'int' | lv_BT_0_3= 'real' | lv_BT_0_4= 'boolean' | lv_BT_0_5= 'String' | lv_BT_0_6= 'Interval' ) ) ) ;
    public final EObject ruleBasicType() throws RecognitionException {
        EObject current = null;

        Token lv_BT_0_1=null;
        Token lv_BT_0_2=null;
        Token lv_BT_0_3=null;
        Token lv_BT_0_4=null;
        Token lv_BT_0_5=null;
        Token lv_BT_0_6=null;

         enterRule(); 
            
        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:456:28: ( ( ( (lv_BT_0_1= 'void' | lv_BT_0_2= 'int' | lv_BT_0_3= 'real' | lv_BT_0_4= 'boolean' | lv_BT_0_5= 'String' | lv_BT_0_6= 'Interval' ) ) ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:457:1: ( ( (lv_BT_0_1= 'void' | lv_BT_0_2= 'int' | lv_BT_0_3= 'real' | lv_BT_0_4= 'boolean' | lv_BT_0_5= 'String' | lv_BT_0_6= 'Interval' ) ) )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:457:1: ( ( (lv_BT_0_1= 'void' | lv_BT_0_2= 'int' | lv_BT_0_3= 'real' | lv_BT_0_4= 'boolean' | lv_BT_0_5= 'String' | lv_BT_0_6= 'Interval' ) ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:458:1: ( (lv_BT_0_1= 'void' | lv_BT_0_2= 'int' | lv_BT_0_3= 'real' | lv_BT_0_4= 'boolean' | lv_BT_0_5= 'String' | lv_BT_0_6= 'Interval' ) )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:458:1: ( (lv_BT_0_1= 'void' | lv_BT_0_2= 'int' | lv_BT_0_3= 'real' | lv_BT_0_4= 'boolean' | lv_BT_0_5= 'String' | lv_BT_0_6= 'Interval' ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:459:1: (lv_BT_0_1= 'void' | lv_BT_0_2= 'int' | lv_BT_0_3= 'real' | lv_BT_0_4= 'boolean' | lv_BT_0_5= 'String' | lv_BT_0_6= 'Interval' )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:459:1: (lv_BT_0_1= 'void' | lv_BT_0_2= 'int' | lv_BT_0_3= 'real' | lv_BT_0_4= 'boolean' | lv_BT_0_5= 'String' | lv_BT_0_6= 'Interval' )
            int alt8=6;
            switch ( input.LA(1) ) {
            case 37:
                {
                alt8=1;
                }
                break;
            case 38:
                {
                alt8=2;
                }
                break;
            case 39:
                {
                alt8=3;
                }
                break;
            case 40:
                {
                alt8=4;
                }
                break;
            case 41:
                {
                alt8=5;
                }
                break;
            case 42:
                {
                alt8=6;
                }
                break;
            default:
                if (state.backtracking>0) {state.failed=true; return current;}
                NoViableAltException nvae =
                    new NoViableAltException("", 8, 0, input);

                throw nvae;
            }

            switch (alt8) {
                case 1 :
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:460:3: lv_BT_0_1= 'void'
                    {
                    lv_BT_0_1=(Token)match(input,37,FOLLOW_37_in_ruleBasicType1181); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                              newLeafNode(lv_BT_0_1, grammarAccess.getBasicTypeAccess().getBTVoidKeyword_0_0());
                          
                    }
                    if ( state.backtracking==0 ) {

                      	        if (current==null) {
                      	            current = createModelElement(grammarAccess.getBasicTypeRule());
                      	        }
                             		setWithLastConsumed(current, "BT", lv_BT_0_1, null);
                      	    
                    }

                    }
                    break;
                case 2 :
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:472:8: lv_BT_0_2= 'int'
                    {
                    lv_BT_0_2=(Token)match(input,38,FOLLOW_38_in_ruleBasicType1210); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                              newLeafNode(lv_BT_0_2, grammarAccess.getBasicTypeAccess().getBTIntKeyword_0_1());
                          
                    }
                    if ( state.backtracking==0 ) {

                      	        if (current==null) {
                      	            current = createModelElement(grammarAccess.getBasicTypeRule());
                      	        }
                             		setWithLastConsumed(current, "BT", lv_BT_0_2, null);
                      	    
                    }

                    }
                    break;
                case 3 :
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:484:8: lv_BT_0_3= 'real'
                    {
                    lv_BT_0_3=(Token)match(input,39,FOLLOW_39_in_ruleBasicType1239); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                              newLeafNode(lv_BT_0_3, grammarAccess.getBasicTypeAccess().getBTRealKeyword_0_2());
                          
                    }
                    if ( state.backtracking==0 ) {

                      	        if (current==null) {
                      	            current = createModelElement(grammarAccess.getBasicTypeRule());
                      	        }
                             		setWithLastConsumed(current, "BT", lv_BT_0_3, null);
                      	    
                    }

                    }
                    break;
                case 4 :
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:496:8: lv_BT_0_4= 'boolean'
                    {
                    lv_BT_0_4=(Token)match(input,40,FOLLOW_40_in_ruleBasicType1268); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                              newLeafNode(lv_BT_0_4, grammarAccess.getBasicTypeAccess().getBTBooleanKeyword_0_3());
                          
                    }
                    if ( state.backtracking==0 ) {

                      	        if (current==null) {
                      	            current = createModelElement(grammarAccess.getBasicTypeRule());
                      	        }
                             		setWithLastConsumed(current, "BT", lv_BT_0_4, null);
                      	    
                    }

                    }
                    break;
                case 5 :
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:508:8: lv_BT_0_5= 'String'
                    {
                    lv_BT_0_5=(Token)match(input,41,FOLLOW_41_in_ruleBasicType1297); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                              newLeafNode(lv_BT_0_5, grammarAccess.getBasicTypeAccess().getBTStringKeyword_0_4());
                          
                    }
                    if ( state.backtracking==0 ) {

                      	        if (current==null) {
                      	            current = createModelElement(grammarAccess.getBasicTypeRule());
                      	        }
                             		setWithLastConsumed(current, "BT", lv_BT_0_5, null);
                      	    
                    }

                    }
                    break;
                case 6 :
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:520:8: lv_BT_0_6= 'Interval'
                    {
                    lv_BT_0_6=(Token)match(input,42,FOLLOW_42_in_ruleBasicType1326); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                              newLeafNode(lv_BT_0_6, grammarAccess.getBasicTypeAccess().getBTIntervalKeyword_0_5());
                          
                    }
                    if ( state.backtracking==0 ) {

                      	        if (current==null) {
                      	            current = createModelElement(grammarAccess.getBasicTypeRule());
                      	        }
                             		setWithLastConsumed(current, "BT", lv_BT_0_6, null);
                      	    
                    }

                    }
                    break;

            }


            }


            }


            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleBasicType"


    // $ANTLR start "entryRuleMathType"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:543:1: entryRuleMathType returns [EObject current=null] : iv_ruleMathType= ruleMathType EOF ;
    public final EObject entryRuleMathType() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleMathType = null;


        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:544:2: (iv_ruleMathType= ruleMathType EOF )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:545:2: iv_ruleMathType= ruleMathType EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getMathTypeRule()); 
            }
            pushFollow(FOLLOW_ruleMathType_in_entryRuleMathType1377);
            iv_ruleMathType=ruleMathType();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleMathType; 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRuleMathType1387); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleMathType"


    // $ANTLR start "ruleMathType"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:552:1: ruleMathType returns [EObject current=null] : ( ( (lv_MT_0_1= 'Int' | lv_MT_0_2= 'Real' ) ) ) ;
    public final EObject ruleMathType() throws RecognitionException {
        EObject current = null;

        Token lv_MT_0_1=null;
        Token lv_MT_0_2=null;

         enterRule(); 
            
        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:555:28: ( ( ( (lv_MT_0_1= 'Int' | lv_MT_0_2= 'Real' ) ) ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:556:1: ( ( (lv_MT_0_1= 'Int' | lv_MT_0_2= 'Real' ) ) )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:556:1: ( ( (lv_MT_0_1= 'Int' | lv_MT_0_2= 'Real' ) ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:557:1: ( (lv_MT_0_1= 'Int' | lv_MT_0_2= 'Real' ) )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:557:1: ( (lv_MT_0_1= 'Int' | lv_MT_0_2= 'Real' ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:558:1: (lv_MT_0_1= 'Int' | lv_MT_0_2= 'Real' )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:558:1: (lv_MT_0_1= 'Int' | lv_MT_0_2= 'Real' )
            int alt9=2;
            int LA9_0 = input.LA(1);

            if ( (LA9_0==43) ) {
                alt9=1;
            }
            else if ( (LA9_0==44) ) {
                alt9=2;
            }
            else {
                if (state.backtracking>0) {state.failed=true; return current;}
                NoViableAltException nvae =
                    new NoViableAltException("", 9, 0, input);

                throw nvae;
            }
            switch (alt9) {
                case 1 :
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:559:3: lv_MT_0_1= 'Int'
                    {
                    lv_MT_0_1=(Token)match(input,43,FOLLOW_43_in_ruleMathType1431); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                              newLeafNode(lv_MT_0_1, grammarAccess.getMathTypeAccess().getMTIntKeyword_0_0());
                          
                    }
                    if ( state.backtracking==0 ) {

                      	        if (current==null) {
                      	            current = createModelElement(grammarAccess.getMathTypeRule());
                      	        }
                             		setWithLastConsumed(current, "MT", lv_MT_0_1, null);
                      	    
                    }

                    }
                    break;
                case 2 :
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:571:8: lv_MT_0_2= 'Real'
                    {
                    lv_MT_0_2=(Token)match(input,44,FOLLOW_44_in_ruleMathType1460); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                              newLeafNode(lv_MT_0_2, grammarAccess.getMathTypeAccess().getMTRealKeyword_0_1());
                          
                    }
                    if ( state.backtracking==0 ) {

                      	        if (current==null) {
                      	            current = createModelElement(grammarAccess.getMathTypeRule());
                      	        }
                             		setWithLastConsumed(current, "MT", lv_MT_0_2, null);
                      	    
                    }

                    }
                    break;

            }


            }


            }


            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleMathType"


    // $ANTLR start "entryRuleInterface"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:594:1: entryRuleInterface returns [EObject current=null] : iv_ruleInterface= ruleInterface EOF ;
    public final EObject entryRuleInterface() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleInterface = null;


        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:595:2: (iv_ruleInterface= ruleInterface EOF )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:596:2: iv_ruleInterface= ruleInterface EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getInterfaceRule()); 
            }
            pushFollow(FOLLOW_ruleInterface_in_entryRuleInterface1511);
            iv_ruleInterface=ruleInterface();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleInterface; 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRuleInterface1521); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleInterface"


    // $ANTLR start "ruleInterface"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:603:1: ruleInterface returns [EObject current=null] : ( ( ruleModifier )? otherlv_1= 'interface' ( (lv_name_2_0= RULE_ID ) ) (otherlv_3= 'extends' ( ( ruleQualifiedName ) ) )? otherlv_5= '{' ( (lv_members_6_0= ruleAbstractInterfaceElement ) )* otherlv_7= '}' ) ;
    public final EObject ruleInterface() throws RecognitionException {
        EObject current = null;

        Token otherlv_1=null;
        Token lv_name_2_0=null;
        Token otherlv_3=null;
        Token otherlv_5=null;
        Token otherlv_7=null;
        EObject lv_members_6_0 = null;


         enterRule(); 
            
        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:606:28: ( ( ( ruleModifier )? otherlv_1= 'interface' ( (lv_name_2_0= RULE_ID ) ) (otherlv_3= 'extends' ( ( ruleQualifiedName ) ) )? otherlv_5= '{' ( (lv_members_6_0= ruleAbstractInterfaceElement ) )* otherlv_7= '}' ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:607:1: ( ( ruleModifier )? otherlv_1= 'interface' ( (lv_name_2_0= RULE_ID ) ) (otherlv_3= 'extends' ( ( ruleQualifiedName ) ) )? otherlv_5= '{' ( (lv_members_6_0= ruleAbstractInterfaceElement ) )* otherlv_7= '}' )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:607:1: ( ( ruleModifier )? otherlv_1= 'interface' ( (lv_name_2_0= RULE_ID ) ) (otherlv_3= 'extends' ( ( ruleQualifiedName ) ) )? otherlv_5= '{' ( (lv_members_6_0= ruleAbstractInterfaceElement ) )* otherlv_7= '}' )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:607:2: ( ruleModifier )? otherlv_1= 'interface' ( (lv_name_2_0= RULE_ID ) ) (otherlv_3= 'extends' ( ( ruleQualifiedName ) ) )? otherlv_5= '{' ( (lv_members_6_0= ruleAbstractInterfaceElement ) )* otherlv_7= '}'
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:607:2: ( ruleModifier )?
            int alt10=2;
            int LA10_0 = input.LA(1);

            if ( ((LA10_0>=33 && LA10_0<=34)) ) {
                alt10=1;
            }
            switch (alt10) {
                case 1 :
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:608:5: ruleModifier
                    {
                    if ( state.backtracking==0 ) {
                       
                              newCompositeNode(grammarAccess.getInterfaceAccess().getModifierParserRuleCall_0()); 
                          
                    }
                    pushFollow(FOLLOW_ruleModifier_in_ruleInterface1563);
                    ruleModifier();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {
                       
                              afterParserOrEnumRuleCall();
                          
                    }

                    }
                    break;

            }

            otherlv_1=(Token)match(input,45,FOLLOW_45_in_ruleInterface1576); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_1, grammarAccess.getInterfaceAccess().getInterfaceKeyword_1());
                  
            }
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:619:1: ( (lv_name_2_0= RULE_ID ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:620:1: (lv_name_2_0= RULE_ID )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:620:1: (lv_name_2_0= RULE_ID )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:621:3: lv_name_2_0= RULE_ID
            {
            lv_name_2_0=(Token)match(input,RULE_ID,FOLLOW_RULE_ID_in_ruleInterface1593); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(lv_name_2_0, grammarAccess.getInterfaceAccess().getNameIDTerminalRuleCall_2_0()); 
              		
            }
            if ( state.backtracking==0 ) {

              	        if (current==null) {
              	            current = createModelElement(grammarAccess.getInterfaceRule());
              	        }
                     		setWithLastConsumed(
                     			current, 
                     			"name",
                      		lv_name_2_0, 
                      		"ID");
              	    
            }

            }


            }

            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:637:2: (otherlv_3= 'extends' ( ( ruleQualifiedName ) ) )?
            int alt11=2;
            int LA11_0 = input.LA(1);

            if ( (LA11_0==46) ) {
                alt11=1;
            }
            switch (alt11) {
                case 1 :
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:637:4: otherlv_3= 'extends' ( ( ruleQualifiedName ) )
                    {
                    otherlv_3=(Token)match(input,46,FOLLOW_46_in_ruleInterface1611); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                          	newLeafNode(otherlv_3, grammarAccess.getInterfaceAccess().getExtendsKeyword_3_0());
                          
                    }
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:641:1: ( ( ruleQualifiedName ) )
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:642:1: ( ruleQualifiedName )
                    {
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:642:1: ( ruleQualifiedName )
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:643:3: ruleQualifiedName
                    {
                    if ( state.backtracking==0 ) {

                      			if (current==null) {
                      	            current = createModelElement(grammarAccess.getInterfaceRule());
                      	        }
                              
                    }
                    if ( state.backtracking==0 ) {
                       
                      	        newCompositeNode(grammarAccess.getInterfaceAccess().getSuperclassInterfaceCrossReference_3_1_0()); 
                      	    
                    }
                    pushFollow(FOLLOW_ruleQualifiedName_in_ruleInterface1634);
                    ruleQualifiedName();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {
                       
                      	        afterParserOrEnumRuleCall();
                      	    
                    }

                    }


                    }


                    }
                    break;

            }

            otherlv_5=(Token)match(input,47,FOLLOW_47_in_ruleInterface1648); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_5, grammarAccess.getInterfaceAccess().getLeftCurlyBracketKeyword_4());
                  
            }
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:660:1: ( (lv_members_6_0= ruleAbstractInterfaceElement ) )*
            loop12:
            do {
                int alt12=2;
                int LA12_0 = input.LA(1);

                if ( (LA12_0==RULE_ID||(LA12_0>=33 && LA12_0<=34)||(LA12_0>=36 && LA12_0<=44)||LA12_0==56||(LA12_0>=65 && LA12_0<=66)) ) {
                    alt12=1;
                }


                switch (alt12) {
            	case 1 :
            	    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:661:1: (lv_members_6_0= ruleAbstractInterfaceElement )
            	    {
            	    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:661:1: (lv_members_6_0= ruleAbstractInterfaceElement )
            	    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:662:3: lv_members_6_0= ruleAbstractInterfaceElement
            	    {
            	    if ( state.backtracking==0 ) {
            	       
            	      	        newCompositeNode(grammarAccess.getInterfaceAccess().getMembersAbstractInterfaceElementParserRuleCall_5_0()); 
            	      	    
            	    }
            	    pushFollow(FOLLOW_ruleAbstractInterfaceElement_in_ruleInterface1669);
            	    lv_members_6_0=ruleAbstractInterfaceElement();

            	    state._fsp--;
            	    if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      	        if (current==null) {
            	      	            current = createModelElementForParent(grammarAccess.getInterfaceRule());
            	      	        }
            	             		add(
            	             			current, 
            	             			"members",
            	              		lv_members_6_0, 
            	              		"AbstractInterfaceElement");
            	      	        afterParserOrEnumRuleCall();
            	      	    
            	    }

            	    }


            	    }
            	    break;

            	default :
            	    break loop12;
                }
            } while (true);

            otherlv_7=(Token)match(input,48,FOLLOW_48_in_ruleInterface1682); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_7, grammarAccess.getInterfaceAccess().getRightCurlyBracketKeyword_6());
                  
            }

            }


            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleInterface"


    // $ANTLR start "entryRuleClass"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:690:1: entryRuleClass returns [EObject current=null] : iv_ruleClass= ruleClass EOF ;
    public final EObject entryRuleClass() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleClass = null;


        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:691:2: (iv_ruleClass= ruleClass EOF )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:692:2: iv_ruleClass= ruleClass EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getClassRule()); 
            }
            pushFollow(FOLLOW_ruleClass_in_entryRuleClass1718);
            iv_ruleClass=ruleClass();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleClass; 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRuleClass1728); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleClass"


    // $ANTLR start "ruleClass"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:699:1: ruleClass returns [EObject current=null] : ( ( ruleModifier )? otherlv_1= 'class' ( (lv_name_2_0= RULE_ID ) ) (otherlv_3= 'extends' ( ( ruleQualifiedName ) ) )? (otherlv_5= 'implements' ( ( ruleQualifiedName ) ) )? otherlv_7= '{' ( (lv_members_8_0= ruleMember ) )* otherlv_9= '}' ) ;
    public final EObject ruleClass() throws RecognitionException {
        EObject current = null;

        Token otherlv_1=null;
        Token lv_name_2_0=null;
        Token otherlv_3=null;
        Token otherlv_5=null;
        Token otherlv_7=null;
        Token otherlv_9=null;
        EObject lv_members_8_0 = null;


         enterRule(); 
            
        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:702:28: ( ( ( ruleModifier )? otherlv_1= 'class' ( (lv_name_2_0= RULE_ID ) ) (otherlv_3= 'extends' ( ( ruleQualifiedName ) ) )? (otherlv_5= 'implements' ( ( ruleQualifiedName ) ) )? otherlv_7= '{' ( (lv_members_8_0= ruleMember ) )* otherlv_9= '}' ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:703:1: ( ( ruleModifier )? otherlv_1= 'class' ( (lv_name_2_0= RULE_ID ) ) (otherlv_3= 'extends' ( ( ruleQualifiedName ) ) )? (otherlv_5= 'implements' ( ( ruleQualifiedName ) ) )? otherlv_7= '{' ( (lv_members_8_0= ruleMember ) )* otherlv_9= '}' )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:703:1: ( ( ruleModifier )? otherlv_1= 'class' ( (lv_name_2_0= RULE_ID ) ) (otherlv_3= 'extends' ( ( ruleQualifiedName ) ) )? (otherlv_5= 'implements' ( ( ruleQualifiedName ) ) )? otherlv_7= '{' ( (lv_members_8_0= ruleMember ) )* otherlv_9= '}' )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:703:2: ( ruleModifier )? otherlv_1= 'class' ( (lv_name_2_0= RULE_ID ) ) (otherlv_3= 'extends' ( ( ruleQualifiedName ) ) )? (otherlv_5= 'implements' ( ( ruleQualifiedName ) ) )? otherlv_7= '{' ( (lv_members_8_0= ruleMember ) )* otherlv_9= '}'
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:703:2: ( ruleModifier )?
            int alt13=2;
            int LA13_0 = input.LA(1);

            if ( ((LA13_0>=33 && LA13_0<=34)) ) {
                alt13=1;
            }
            switch (alt13) {
                case 1 :
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:704:5: ruleModifier
                    {
                    if ( state.backtracking==0 ) {
                       
                              newCompositeNode(grammarAccess.getClassAccess().getModifierParserRuleCall_0()); 
                          
                    }
                    pushFollow(FOLLOW_ruleModifier_in_ruleClass1770);
                    ruleModifier();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {
                       
                              afterParserOrEnumRuleCall();
                          
                    }

                    }
                    break;

            }

            otherlv_1=(Token)match(input,49,FOLLOW_49_in_ruleClass1783); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_1, grammarAccess.getClassAccess().getClassKeyword_1());
                  
            }
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:715:1: ( (lv_name_2_0= RULE_ID ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:716:1: (lv_name_2_0= RULE_ID )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:716:1: (lv_name_2_0= RULE_ID )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:717:3: lv_name_2_0= RULE_ID
            {
            lv_name_2_0=(Token)match(input,RULE_ID,FOLLOW_RULE_ID_in_ruleClass1800); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(lv_name_2_0, grammarAccess.getClassAccess().getNameIDTerminalRuleCall_2_0()); 
              		
            }
            if ( state.backtracking==0 ) {

              	        if (current==null) {
              	            current = createModelElement(grammarAccess.getClassRule());
              	        }
                     		setWithLastConsumed(
                     			current, 
                     			"name",
                      		lv_name_2_0, 
                      		"ID");
              	    
            }

            }


            }

            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:733:2: (otherlv_3= 'extends' ( ( ruleQualifiedName ) ) )?
            int alt14=2;
            int LA14_0 = input.LA(1);

            if ( (LA14_0==46) ) {
                alt14=1;
            }
            switch (alt14) {
                case 1 :
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:733:4: otherlv_3= 'extends' ( ( ruleQualifiedName ) )
                    {
                    otherlv_3=(Token)match(input,46,FOLLOW_46_in_ruleClass1818); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                          	newLeafNode(otherlv_3, grammarAccess.getClassAccess().getExtendsKeyword_3_0());
                          
                    }
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:737:1: ( ( ruleQualifiedName ) )
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:738:1: ( ruleQualifiedName )
                    {
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:738:1: ( ruleQualifiedName )
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:739:3: ruleQualifiedName
                    {
                    if ( state.backtracking==0 ) {

                      			if (current==null) {
                      	            current = createModelElement(grammarAccess.getClassRule());
                      	        }
                              
                    }
                    if ( state.backtracking==0 ) {
                       
                      	        newCompositeNode(grammarAccess.getClassAccess().getSuperclassClassCrossReference_3_1_0()); 
                      	    
                    }
                    pushFollow(FOLLOW_ruleQualifiedName_in_ruleClass1841);
                    ruleQualifiedName();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {
                       
                      	        afterParserOrEnumRuleCall();
                      	    
                    }

                    }


                    }


                    }
                    break;

            }

            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:752:4: (otherlv_5= 'implements' ( ( ruleQualifiedName ) ) )?
            int alt15=2;
            int LA15_0 = input.LA(1);

            if ( (LA15_0==50) ) {
                alt15=1;
            }
            switch (alt15) {
                case 1 :
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:752:6: otherlv_5= 'implements' ( ( ruleQualifiedName ) )
                    {
                    otherlv_5=(Token)match(input,50,FOLLOW_50_in_ruleClass1856); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                          	newLeafNode(otherlv_5, grammarAccess.getClassAccess().getImplementsKeyword_4_0());
                          
                    }
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:756:1: ( ( ruleQualifiedName ) )
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:757:1: ( ruleQualifiedName )
                    {
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:757:1: ( ruleQualifiedName )
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:758:3: ruleQualifiedName
                    {
                    if ( state.backtracking==0 ) {

                      			if (current==null) {
                      	            current = createModelElement(grammarAccess.getClassRule());
                      	        }
                              
                    }
                    if ( state.backtracking==0 ) {
                       
                      	        newCompositeNode(grammarAccess.getClassAccess().getInterfaceclassInterfaceCrossReference_4_1_0()); 
                      	    
                    }
                    pushFollow(FOLLOW_ruleQualifiedName_in_ruleClass1879);
                    ruleQualifiedName();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {
                       
                      	        afterParserOrEnumRuleCall();
                      	    
                    }

                    }


                    }


                    }
                    break;

            }

            otherlv_7=(Token)match(input,47,FOLLOW_47_in_ruleClass1893); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_7, grammarAccess.getClassAccess().getLeftCurlyBracketKeyword_5());
                  
            }
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:775:1: ( (lv_members_8_0= ruleMember ) )*
            loop16:
            do {
                int alt16=2;
                int LA16_0 = input.LA(1);

                if ( (LA16_0==RULE_ID||(LA16_0>=33 && LA16_0<=35)||(LA16_0>=37 && LA16_0<=44)||LA16_0==66) ) {
                    alt16=1;
                }


                switch (alt16) {
            	case 1 :
            	    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:776:1: (lv_members_8_0= ruleMember )
            	    {
            	    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:776:1: (lv_members_8_0= ruleMember )
            	    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:777:3: lv_members_8_0= ruleMember
            	    {
            	    if ( state.backtracking==0 ) {
            	       
            	      	        newCompositeNode(grammarAccess.getClassAccess().getMembersMemberParserRuleCall_6_0()); 
            	      	    
            	    }
            	    pushFollow(FOLLOW_ruleMember_in_ruleClass1914);
            	    lv_members_8_0=ruleMember();

            	    state._fsp--;
            	    if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      	        if (current==null) {
            	      	            current = createModelElementForParent(grammarAccess.getClassRule());
            	      	        }
            	             		add(
            	             			current, 
            	             			"members",
            	              		lv_members_8_0, 
            	              		"Member");
            	      	        afterParserOrEnumRuleCall();
            	      	    
            	    }

            	    }


            	    }
            	    break;

            	default :
            	    break loop16;
                }
            } while (true);

            otherlv_9=(Token)match(input,48,FOLLOW_48_in_ruleClass1927); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_9, grammarAccess.getClassAccess().getRightCurlyBracketKeyword_7());
                  
            }

            }


            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleClass"


    // $ANTLR start "entryRuleMember"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:805:1: entryRuleMember returns [EObject current=null] : iv_ruleMember= ruleMember EOF ;
    public final EObject entryRuleMember() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleMember = null;


        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:806:2: (iv_ruleMember= ruleMember EOF )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:807:2: iv_ruleMember= ruleMember EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getMemberRule()); 
            }
            pushFollow(FOLLOW_ruleMember_in_entryRuleMember1963);
            iv_ruleMember=ruleMember();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleMember; 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRuleMember1973); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleMember"


    // $ANTLR start "ruleMember"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:814:1: ruleMember returns [EObject current=null] : (this_Field_0= ruleField | this_Method_1= ruleMethod | this_ConstructorMethod_2= ruleConstructorMethod | this_ContinuousMethod_3= ruleContinuousMethod | this_InvariantBlock_4= ruleInvariantBlock | this_CompositionMethod_5= ruleCompositionMethod | this_DiscreteMethod_6= ruleDiscreteMethod | this_InitMethod_7= ruleInitMethod ) ;
    public final EObject ruleMember() throws RecognitionException {
        EObject current = null;

        EObject this_Field_0 = null;

        EObject this_Method_1 = null;

        EObject this_ConstructorMethod_2 = null;

        EObject this_ContinuousMethod_3 = null;

        EObject this_InvariantBlock_4 = null;

        EObject this_CompositionMethod_5 = null;

        EObject this_DiscreteMethod_6 = null;

        EObject this_InitMethod_7 = null;


         enterRule(); 
            
        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:817:28: ( (this_Field_0= ruleField | this_Method_1= ruleMethod | this_ConstructorMethod_2= ruleConstructorMethod | this_ContinuousMethod_3= ruleContinuousMethod | this_InvariantBlock_4= ruleInvariantBlock | this_CompositionMethod_5= ruleCompositionMethod | this_DiscreteMethod_6= ruleDiscreteMethod | this_InitMethod_7= ruleInitMethod ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:818:1: (this_Field_0= ruleField | this_Method_1= ruleMethod | this_ConstructorMethod_2= ruleConstructorMethod | this_ContinuousMethod_3= ruleContinuousMethod | this_InvariantBlock_4= ruleInvariantBlock | this_CompositionMethod_5= ruleCompositionMethod | this_DiscreteMethod_6= ruleDiscreteMethod | this_InitMethod_7= ruleInitMethod )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:818:1: (this_Field_0= ruleField | this_Method_1= ruleMethod | this_ConstructorMethod_2= ruleConstructorMethod | this_ContinuousMethod_3= ruleContinuousMethod | this_InvariantBlock_4= ruleInvariantBlock | this_CompositionMethod_5= ruleCompositionMethod | this_DiscreteMethod_6= ruleDiscreteMethod | this_InitMethod_7= ruleInitMethod )
            int alt17=8;
            alt17 = dfa17.predict(input);
            switch (alt17) {
                case 1 :
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:819:5: this_Field_0= ruleField
                    {
                    if ( state.backtracking==0 ) {
                       
                              newCompositeNode(grammarAccess.getMemberAccess().getFieldParserRuleCall_0()); 
                          
                    }
                    pushFollow(FOLLOW_ruleField_in_ruleMember2020);
                    this_Field_0=ruleField();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {
                       
                              current = this_Field_0; 
                              afterParserOrEnumRuleCall();
                          
                    }

                    }
                    break;
                case 2 :
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:829:5: this_Method_1= ruleMethod
                    {
                    if ( state.backtracking==0 ) {
                       
                              newCompositeNode(grammarAccess.getMemberAccess().getMethodParserRuleCall_1()); 
                          
                    }
                    pushFollow(FOLLOW_ruleMethod_in_ruleMember2047);
                    this_Method_1=ruleMethod();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {
                       
                              current = this_Method_1; 
                              afterParserOrEnumRuleCall();
                          
                    }

                    }
                    break;
                case 3 :
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:839:5: this_ConstructorMethod_2= ruleConstructorMethod
                    {
                    if ( state.backtracking==0 ) {
                       
                              newCompositeNode(grammarAccess.getMemberAccess().getConstructorMethodParserRuleCall_2()); 
                          
                    }
                    pushFollow(FOLLOW_ruleConstructorMethod_in_ruleMember2074);
                    this_ConstructorMethod_2=ruleConstructorMethod();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {
                       
                              current = this_ConstructorMethod_2; 
                              afterParserOrEnumRuleCall();
                          
                    }

                    }
                    break;
                case 4 :
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:849:5: this_ContinuousMethod_3= ruleContinuousMethod
                    {
                    if ( state.backtracking==0 ) {
                       
                              newCompositeNode(grammarAccess.getMemberAccess().getContinuousMethodParserRuleCall_3()); 
                          
                    }
                    pushFollow(FOLLOW_ruleContinuousMethod_in_ruleMember2101);
                    this_ContinuousMethod_3=ruleContinuousMethod();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {
                       
                              current = this_ContinuousMethod_3; 
                              afterParserOrEnumRuleCall();
                          
                    }

                    }
                    break;
                case 5 :
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:859:5: this_InvariantBlock_4= ruleInvariantBlock
                    {
                    if ( state.backtracking==0 ) {
                       
                              newCompositeNode(grammarAccess.getMemberAccess().getInvariantBlockParserRuleCall_4()); 
                          
                    }
                    pushFollow(FOLLOW_ruleInvariantBlock_in_ruleMember2128);
                    this_InvariantBlock_4=ruleInvariantBlock();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {
                       
                              current = this_InvariantBlock_4; 
                              afterParserOrEnumRuleCall();
                          
                    }

                    }
                    break;
                case 6 :
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:869:5: this_CompositionMethod_5= ruleCompositionMethod
                    {
                    if ( state.backtracking==0 ) {
                       
                              newCompositeNode(grammarAccess.getMemberAccess().getCompositionMethodParserRuleCall_5()); 
                          
                    }
                    pushFollow(FOLLOW_ruleCompositionMethod_in_ruleMember2155);
                    this_CompositionMethod_5=ruleCompositionMethod();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {
                       
                              current = this_CompositionMethod_5; 
                              afterParserOrEnumRuleCall();
                          
                    }

                    }
                    break;
                case 7 :
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:879:5: this_DiscreteMethod_6= ruleDiscreteMethod
                    {
                    if ( state.backtracking==0 ) {
                       
                              newCompositeNode(grammarAccess.getMemberAccess().getDiscreteMethodParserRuleCall_6()); 
                          
                    }
                    pushFollow(FOLLOW_ruleDiscreteMethod_in_ruleMember2182);
                    this_DiscreteMethod_6=ruleDiscreteMethod();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {
                       
                              current = this_DiscreteMethod_6; 
                              afterParserOrEnumRuleCall();
                          
                    }

                    }
                    break;
                case 8 :
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:889:5: this_InitMethod_7= ruleInitMethod
                    {
                    if ( state.backtracking==0 ) {
                       
                              newCompositeNode(grammarAccess.getMemberAccess().getInitMethodParserRuleCall_7()); 
                          
                    }
                    pushFollow(FOLLOW_ruleInitMethod_in_ruleMember2209);
                    this_InitMethod_7=ruleInitMethod();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {
                       
                              current = this_InitMethod_7; 
                              afterParserOrEnumRuleCall();
                          
                    }

                    }
                    break;

            }


            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleMember"


    // $ANTLR start "entryRuleFieldName"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:905:1: entryRuleFieldName returns [String current=null] : iv_ruleFieldName= ruleFieldName EOF ;
    public final String entryRuleFieldName() throws RecognitionException {
        String current = null;

        AntlrDatatypeRuleToken iv_ruleFieldName = null;


        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:906:2: (iv_ruleFieldName= ruleFieldName EOF )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:907:2: iv_ruleFieldName= ruleFieldName EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getFieldNameRule()); 
            }
            pushFollow(FOLLOW_ruleFieldName_in_entryRuleFieldName2245);
            iv_ruleFieldName=ruleFieldName();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleFieldName.getText(); 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRuleFieldName2256); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleFieldName"


    // $ANTLR start "ruleFieldName"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:914:1: ruleFieldName returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : this_ID_0= RULE_ID ;
    public final AntlrDatatypeRuleToken ruleFieldName() throws RecognitionException {
        AntlrDatatypeRuleToken current = new AntlrDatatypeRuleToken();

        Token this_ID_0=null;

         enterRule(); 
            
        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:917:28: (this_ID_0= RULE_ID )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:918:5: this_ID_0= RULE_ID
            {
            this_ID_0=(Token)match(input,RULE_ID,FOLLOW_RULE_ID_in_ruleFieldName2295); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              		current.merge(this_ID_0);
                  
            }
            if ( state.backtracking==0 ) {
               
                  newLeafNode(this_ID_0, grammarAccess.getFieldNameAccess().getIDTerminalRuleCall()); 
                  
            }

            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleFieldName"


    // $ANTLR start "entryRuleField"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:933:1: entryRuleField returns [EObject current=null] : iv_ruleField= ruleField EOF ;
    public final EObject entryRuleField() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleField = null;


        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:934:2: (iv_ruleField= ruleField EOF )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:935:2: iv_ruleField= ruleField EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getFieldRule()); 
            }
            pushFollow(FOLLOW_ruleField_in_entryRuleField2339);
            iv_ruleField=ruleField();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleField; 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRuleField2349); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleField"


    // $ANTLR start "ruleField"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:942:1: ruleField returns [EObject current=null] : ( ( (lv_accessmodifer_0_0= ruleModifier ) )? ( (lv_variablemodifer_1_0= ruleVARIABLE_MODIFIER ) )? ( (lv_type_2_0= ruleUseType ) ) ( (lv_dim_3_0= ruleDim ) )* ( (lv_name_4_0= ruleFieldName ) ) (otherlv_5= '=' ( (lv_varini_6_0= ruleVariableInitializer ) ) )? otherlv_7= ';' ) ;
    public final EObject ruleField() throws RecognitionException {
        EObject current = null;

        Token otherlv_5=null;
        Token otherlv_7=null;
        AntlrDatatypeRuleToken lv_accessmodifer_0_0 = null;

        AntlrDatatypeRuleToken lv_variablemodifer_1_0 = null;

        EObject lv_type_2_0 = null;

        AntlrDatatypeRuleToken lv_dim_3_0 = null;

        AntlrDatatypeRuleToken lv_name_4_0 = null;

        EObject lv_varini_6_0 = null;


         enterRule(); 
            
        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:945:28: ( ( ( (lv_accessmodifer_0_0= ruleModifier ) )? ( (lv_variablemodifer_1_0= ruleVARIABLE_MODIFIER ) )? ( (lv_type_2_0= ruleUseType ) ) ( (lv_dim_3_0= ruleDim ) )* ( (lv_name_4_0= ruleFieldName ) ) (otherlv_5= '=' ( (lv_varini_6_0= ruleVariableInitializer ) ) )? otherlv_7= ';' ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:946:1: ( ( (lv_accessmodifer_0_0= ruleModifier ) )? ( (lv_variablemodifer_1_0= ruleVARIABLE_MODIFIER ) )? ( (lv_type_2_0= ruleUseType ) ) ( (lv_dim_3_0= ruleDim ) )* ( (lv_name_4_0= ruleFieldName ) ) (otherlv_5= '=' ( (lv_varini_6_0= ruleVariableInitializer ) ) )? otherlv_7= ';' )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:946:1: ( ( (lv_accessmodifer_0_0= ruleModifier ) )? ( (lv_variablemodifer_1_0= ruleVARIABLE_MODIFIER ) )? ( (lv_type_2_0= ruleUseType ) ) ( (lv_dim_3_0= ruleDim ) )* ( (lv_name_4_0= ruleFieldName ) ) (otherlv_5= '=' ( (lv_varini_6_0= ruleVariableInitializer ) ) )? otherlv_7= ';' )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:946:2: ( (lv_accessmodifer_0_0= ruleModifier ) )? ( (lv_variablemodifer_1_0= ruleVARIABLE_MODIFIER ) )? ( (lv_type_2_0= ruleUseType ) ) ( (lv_dim_3_0= ruleDim ) )* ( (lv_name_4_0= ruleFieldName ) ) (otherlv_5= '=' ( (lv_varini_6_0= ruleVariableInitializer ) ) )? otherlv_7= ';'
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:946:2: ( (lv_accessmodifer_0_0= ruleModifier ) )?
            int alt18=2;
            int LA18_0 = input.LA(1);

            if ( ((LA18_0>=33 && LA18_0<=34)) ) {
                alt18=1;
            }
            switch (alt18) {
                case 1 :
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:947:1: (lv_accessmodifer_0_0= ruleModifier )
                    {
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:947:1: (lv_accessmodifer_0_0= ruleModifier )
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:948:3: lv_accessmodifer_0_0= ruleModifier
                    {
                    if ( state.backtracking==0 ) {
                       
                      	        newCompositeNode(grammarAccess.getFieldAccess().getAccessmodiferModifierParserRuleCall_0_0()); 
                      	    
                    }
                    pushFollow(FOLLOW_ruleModifier_in_ruleField2395);
                    lv_accessmodifer_0_0=ruleModifier();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      	        if (current==null) {
                      	            current = createModelElementForParent(grammarAccess.getFieldRule());
                      	        }
                             		set(
                             			current, 
                             			"accessmodifer",
                              		lv_accessmodifer_0_0, 
                              		"Modifier");
                      	        afterParserOrEnumRuleCall();
                      	    
                    }

                    }


                    }
                    break;

            }

            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:964:3: ( (lv_variablemodifer_1_0= ruleVARIABLE_MODIFIER ) )?
            int alt19=2;
            int LA19_0 = input.LA(1);

            if ( (LA19_0==35) ) {
                alt19=1;
            }
            switch (alt19) {
                case 1 :
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:965:1: (lv_variablemodifer_1_0= ruleVARIABLE_MODIFIER )
                    {
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:965:1: (lv_variablemodifer_1_0= ruleVARIABLE_MODIFIER )
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:966:3: lv_variablemodifer_1_0= ruleVARIABLE_MODIFIER
                    {
                    if ( state.backtracking==0 ) {
                       
                      	        newCompositeNode(grammarAccess.getFieldAccess().getVariablemodiferVARIABLE_MODIFIERParserRuleCall_1_0()); 
                      	    
                    }
                    pushFollow(FOLLOW_ruleVARIABLE_MODIFIER_in_ruleField2417);
                    lv_variablemodifer_1_0=ruleVARIABLE_MODIFIER();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      	        if (current==null) {
                      	            current = createModelElementForParent(grammarAccess.getFieldRule());
                      	        }
                             		set(
                             			current, 
                             			"variablemodifer",
                              		lv_variablemodifer_1_0, 
                              		"VARIABLE_MODIFIER");
                      	        afterParserOrEnumRuleCall();
                      	    
                    }

                    }


                    }
                    break;

            }

            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:982:3: ( (lv_type_2_0= ruleUseType ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:983:1: (lv_type_2_0= ruleUseType )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:983:1: (lv_type_2_0= ruleUseType )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:984:3: lv_type_2_0= ruleUseType
            {
            if ( state.backtracking==0 ) {
               
              	        newCompositeNode(grammarAccess.getFieldAccess().getTypeUseTypeParserRuleCall_2_0()); 
              	    
            }
            pushFollow(FOLLOW_ruleUseType_in_ruleField2439);
            lv_type_2_0=ruleUseType();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              	        if (current==null) {
              	            current = createModelElementForParent(grammarAccess.getFieldRule());
              	        }
                     		set(
                     			current, 
                     			"type",
                      		lv_type_2_0, 
                      		"UseType");
              	        afterParserOrEnumRuleCall();
              	    
            }

            }


            }

            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1000:2: ( (lv_dim_3_0= ruleDim ) )*
            loop20:
            do {
                int alt20=2;
                int LA20_0 = input.LA(1);

                if ( (LA20_0==146) ) {
                    alt20=1;
                }


                switch (alt20) {
            	case 1 :
            	    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1001:1: (lv_dim_3_0= ruleDim )
            	    {
            	    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1001:1: (lv_dim_3_0= ruleDim )
            	    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1002:3: lv_dim_3_0= ruleDim
            	    {
            	    if ( state.backtracking==0 ) {
            	       
            	      	        newCompositeNode(grammarAccess.getFieldAccess().getDimDimParserRuleCall_3_0()); 
            	      	    
            	    }
            	    pushFollow(FOLLOW_ruleDim_in_ruleField2460);
            	    lv_dim_3_0=ruleDim();

            	    state._fsp--;
            	    if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      	        if (current==null) {
            	      	            current = createModelElementForParent(grammarAccess.getFieldRule());
            	      	        }
            	             		add(
            	             			current, 
            	             			"dim",
            	              		lv_dim_3_0, 
            	              		"Dim");
            	      	        afterParserOrEnumRuleCall();
            	      	    
            	    }

            	    }


            	    }
            	    break;

            	default :
            	    break loop20;
                }
            } while (true);

            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1018:3: ( (lv_name_4_0= ruleFieldName ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1019:1: (lv_name_4_0= ruleFieldName )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1019:1: (lv_name_4_0= ruleFieldName )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1020:3: lv_name_4_0= ruleFieldName
            {
            if ( state.backtracking==0 ) {
               
              	        newCompositeNode(grammarAccess.getFieldAccess().getNameFieldNameParserRuleCall_4_0()); 
              	    
            }
            pushFollow(FOLLOW_ruleFieldName_in_ruleField2482);
            lv_name_4_0=ruleFieldName();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              	        if (current==null) {
              	            current = createModelElementForParent(grammarAccess.getFieldRule());
              	        }
                     		set(
                     			current, 
                     			"name",
                      		lv_name_4_0, 
                      		"FieldName");
              	        afterParserOrEnumRuleCall();
              	    
            }

            }


            }

            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1036:2: (otherlv_5= '=' ( (lv_varini_6_0= ruleVariableInitializer ) ) )?
            int alt21=2;
            int LA21_0 = input.LA(1);

            if ( (LA21_0==51) ) {
                alt21=1;
            }
            switch (alt21) {
                case 1 :
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1036:4: otherlv_5= '=' ( (lv_varini_6_0= ruleVariableInitializer ) )
                    {
                    otherlv_5=(Token)match(input,51,FOLLOW_51_in_ruleField2495); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                          	newLeafNode(otherlv_5, grammarAccess.getFieldAccess().getEqualsSignKeyword_5_0());
                          
                    }
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1040:1: ( (lv_varini_6_0= ruleVariableInitializer ) )
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1041:1: (lv_varini_6_0= ruleVariableInitializer )
                    {
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1041:1: (lv_varini_6_0= ruleVariableInitializer )
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1042:3: lv_varini_6_0= ruleVariableInitializer
                    {
                    if ( state.backtracking==0 ) {
                       
                      	        newCompositeNode(grammarAccess.getFieldAccess().getVariniVariableInitializerParserRuleCall_5_1_0()); 
                      	    
                    }
                    pushFollow(FOLLOW_ruleVariableInitializer_in_ruleField2516);
                    lv_varini_6_0=ruleVariableInitializer();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      	        if (current==null) {
                      	            current = createModelElementForParent(grammarAccess.getFieldRule());
                      	        }
                             		set(
                             			current, 
                             			"varini",
                              		lv_varini_6_0, 
                              		"VariableInitializer");
                      	        afterParserOrEnumRuleCall();
                      	    
                    }

                    }


                    }


                    }
                    break;

            }

            otherlv_7=(Token)match(input,29,FOLLOW_29_in_ruleField2530); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_7, grammarAccess.getFieldAccess().getSemicolonKeyword_6());
                  
            }

            }


            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleField"


    // $ANTLR start "entryRuleConstructorMethod"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1070:1: entryRuleConstructorMethod returns [EObject current=null] : iv_ruleConstructorMethod= ruleConstructorMethod EOF ;
    public final EObject entryRuleConstructorMethod() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleConstructorMethod = null;


        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1071:2: (iv_ruleConstructorMethod= ruleConstructorMethod EOF )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1072:2: iv_ruleConstructorMethod= ruleConstructorMethod EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getConstructorMethodRule()); 
            }
            pushFollow(FOLLOW_ruleConstructorMethod_in_entryRuleConstructorMethod2566);
            iv_ruleConstructorMethod=ruleConstructorMethod();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleConstructorMethod; 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRuleConstructorMethod2576); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleConstructorMethod"


    // $ANTLR start "ruleConstructorMethod"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1079:1: ruleConstructorMethod returns [EObject current=null] : ( ( (lv_name_0_0= RULE_ID ) ) otherlv_1= '(' ( ( (lv_params_2_0= ruleParameter ) ) (otherlv_3= ',' ( (lv_params_4_0= ruleParameter ) ) )* )? otherlv_5= ')' otherlv_6= '{' ( (lv_body_7_0= ruleMethodBody ) ) otherlv_8= '}' ) ;
    public final EObject ruleConstructorMethod() throws RecognitionException {
        EObject current = null;

        Token lv_name_0_0=null;
        Token otherlv_1=null;
        Token otherlv_3=null;
        Token otherlv_5=null;
        Token otherlv_6=null;
        Token otherlv_8=null;
        EObject lv_params_2_0 = null;

        EObject lv_params_4_0 = null;

        EObject lv_body_7_0 = null;


         enterRule(); 
            
        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1082:28: ( ( ( (lv_name_0_0= RULE_ID ) ) otherlv_1= '(' ( ( (lv_params_2_0= ruleParameter ) ) (otherlv_3= ',' ( (lv_params_4_0= ruleParameter ) ) )* )? otherlv_5= ')' otherlv_6= '{' ( (lv_body_7_0= ruleMethodBody ) ) otherlv_8= '}' ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1083:1: ( ( (lv_name_0_0= RULE_ID ) ) otherlv_1= '(' ( ( (lv_params_2_0= ruleParameter ) ) (otherlv_3= ',' ( (lv_params_4_0= ruleParameter ) ) )* )? otherlv_5= ')' otherlv_6= '{' ( (lv_body_7_0= ruleMethodBody ) ) otherlv_8= '}' )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1083:1: ( ( (lv_name_0_0= RULE_ID ) ) otherlv_1= '(' ( ( (lv_params_2_0= ruleParameter ) ) (otherlv_3= ',' ( (lv_params_4_0= ruleParameter ) ) )* )? otherlv_5= ')' otherlv_6= '{' ( (lv_body_7_0= ruleMethodBody ) ) otherlv_8= '}' )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1083:2: ( (lv_name_0_0= RULE_ID ) ) otherlv_1= '(' ( ( (lv_params_2_0= ruleParameter ) ) (otherlv_3= ',' ( (lv_params_4_0= ruleParameter ) ) )* )? otherlv_5= ')' otherlv_6= '{' ( (lv_body_7_0= ruleMethodBody ) ) otherlv_8= '}'
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1083:2: ( (lv_name_0_0= RULE_ID ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1084:1: (lv_name_0_0= RULE_ID )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1084:1: (lv_name_0_0= RULE_ID )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1085:3: lv_name_0_0= RULE_ID
            {
            lv_name_0_0=(Token)match(input,RULE_ID,FOLLOW_RULE_ID_in_ruleConstructorMethod2618); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(lv_name_0_0, grammarAccess.getConstructorMethodAccess().getNameIDTerminalRuleCall_0_0()); 
              		
            }
            if ( state.backtracking==0 ) {

              	        if (current==null) {
              	            current = createModelElement(grammarAccess.getConstructorMethodRule());
              	        }
                     		setWithLastConsumed(
                     			current, 
                     			"name",
                      		lv_name_0_0, 
                      		"ID");
              	    
            }

            }


            }

            otherlv_1=(Token)match(input,52,FOLLOW_52_in_ruleConstructorMethod2635); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_1, grammarAccess.getConstructorMethodAccess().getLeftParenthesisKeyword_1());
                  
            }
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1105:1: ( ( (lv_params_2_0= ruleParameter ) ) (otherlv_3= ',' ( (lv_params_4_0= ruleParameter ) ) )* )?
            int alt23=2;
            int LA23_0 = input.LA(1);

            if ( (LA23_0==RULE_ID||(LA23_0>=37 && LA23_0<=44)) ) {
                alt23=1;
            }
            switch (alt23) {
                case 1 :
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1105:2: ( (lv_params_2_0= ruleParameter ) ) (otherlv_3= ',' ( (lv_params_4_0= ruleParameter ) ) )*
                    {
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1105:2: ( (lv_params_2_0= ruleParameter ) )
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1106:1: (lv_params_2_0= ruleParameter )
                    {
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1106:1: (lv_params_2_0= ruleParameter )
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1107:3: lv_params_2_0= ruleParameter
                    {
                    if ( state.backtracking==0 ) {
                       
                      	        newCompositeNode(grammarAccess.getConstructorMethodAccess().getParamsParameterParserRuleCall_2_0_0()); 
                      	    
                    }
                    pushFollow(FOLLOW_ruleParameter_in_ruleConstructorMethod2657);
                    lv_params_2_0=ruleParameter();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      	        if (current==null) {
                      	            current = createModelElementForParent(grammarAccess.getConstructorMethodRule());
                      	        }
                             		add(
                             			current, 
                             			"params",
                              		lv_params_2_0, 
                              		"Parameter");
                      	        afterParserOrEnumRuleCall();
                      	    
                    }

                    }


                    }

                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1123:2: (otherlv_3= ',' ( (lv_params_4_0= ruleParameter ) ) )*
                    loop22:
                    do {
                        int alt22=2;
                        int LA22_0 = input.LA(1);

                        if ( (LA22_0==53) ) {
                            alt22=1;
                        }


                        switch (alt22) {
                    	case 1 :
                    	    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1123:4: otherlv_3= ',' ( (lv_params_4_0= ruleParameter ) )
                    	    {
                    	    otherlv_3=(Token)match(input,53,FOLLOW_53_in_ruleConstructorMethod2670); if (state.failed) return current;
                    	    if ( state.backtracking==0 ) {

                    	          	newLeafNode(otherlv_3, grammarAccess.getConstructorMethodAccess().getCommaKeyword_2_1_0());
                    	          
                    	    }
                    	    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1127:1: ( (lv_params_4_0= ruleParameter ) )
                    	    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1128:1: (lv_params_4_0= ruleParameter )
                    	    {
                    	    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1128:1: (lv_params_4_0= ruleParameter )
                    	    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1129:3: lv_params_4_0= ruleParameter
                    	    {
                    	    if ( state.backtracking==0 ) {
                    	       
                    	      	        newCompositeNode(grammarAccess.getConstructorMethodAccess().getParamsParameterParserRuleCall_2_1_1_0()); 
                    	      	    
                    	    }
                    	    pushFollow(FOLLOW_ruleParameter_in_ruleConstructorMethod2691);
                    	    lv_params_4_0=ruleParameter();

                    	    state._fsp--;
                    	    if (state.failed) return current;
                    	    if ( state.backtracking==0 ) {

                    	      	        if (current==null) {
                    	      	            current = createModelElementForParent(grammarAccess.getConstructorMethodRule());
                    	      	        }
                    	             		add(
                    	             			current, 
                    	             			"params",
                    	              		lv_params_4_0, 
                    	              		"Parameter");
                    	      	        afterParserOrEnumRuleCall();
                    	      	    
                    	    }

                    	    }


                    	    }


                    	    }
                    	    break;

                    	default :
                    	    break loop22;
                        }
                    } while (true);


                    }
                    break;

            }

            otherlv_5=(Token)match(input,54,FOLLOW_54_in_ruleConstructorMethod2707); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_5, grammarAccess.getConstructorMethodAccess().getRightParenthesisKeyword_3());
                  
            }
            otherlv_6=(Token)match(input,47,FOLLOW_47_in_ruleConstructorMethod2719); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_6, grammarAccess.getConstructorMethodAccess().getLeftCurlyBracketKeyword_4());
                  
            }
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1153:1: ( (lv_body_7_0= ruleMethodBody ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1154:1: (lv_body_7_0= ruleMethodBody )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1154:1: (lv_body_7_0= ruleMethodBody )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1155:3: lv_body_7_0= ruleMethodBody
            {
            if ( state.backtracking==0 ) {
               
              	        newCompositeNode(grammarAccess.getConstructorMethodAccess().getBodyMethodBodyParserRuleCall_5_0()); 
              	    
            }
            pushFollow(FOLLOW_ruleMethodBody_in_ruleConstructorMethod2740);
            lv_body_7_0=ruleMethodBody();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              	        if (current==null) {
              	            current = createModelElementForParent(grammarAccess.getConstructorMethodRule());
              	        }
                     		set(
                     			current, 
                     			"body",
                      		lv_body_7_0, 
                      		"MethodBody");
              	        afterParserOrEnumRuleCall();
              	    
            }

            }


            }

            otherlv_8=(Token)match(input,48,FOLLOW_48_in_ruleConstructorMethod2752); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_8, grammarAccess.getConstructorMethodAccess().getRightCurlyBracketKeyword_6());
                  
            }

            }


            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleConstructorMethod"


    // $ANTLR start "entryRuleMethod"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1183:1: entryRuleMethod returns [EObject current=null] : iv_ruleMethod= ruleMethod EOF ;
    public final EObject entryRuleMethod() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleMethod = null;


        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1184:2: (iv_ruleMethod= ruleMethod EOF )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1185:2: iv_ruleMethod= ruleMethod EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getMethodRule()); 
            }
            pushFollow(FOLLOW_ruleMethod_in_entryRuleMethod2788);
            iv_ruleMethod=ruleMethod();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleMethod; 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRuleMethod2798); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleMethod"


    // $ANTLR start "ruleMethod"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1192:1: ruleMethod returns [EObject current=null] : ( ( ruleModifier )? ( (lv_type_1_0= ruleUseType ) ) ( (lv_dim_2_0= ruleDim ) )* ( (lv_name_3_0= RULE_ID ) ) otherlv_4= '(' ( ( (lv_params_5_0= ruleParameter ) ) (otherlv_6= ',' ( (lv_params_7_0= ruleParameter ) ) )* )? otherlv_8= ')' otherlv_9= '{' ( (lv_body_10_0= ruleMethodBody ) ) otherlv_11= '}' ) ;
    public final EObject ruleMethod() throws RecognitionException {
        EObject current = null;

        Token lv_name_3_0=null;
        Token otherlv_4=null;
        Token otherlv_6=null;
        Token otherlv_8=null;
        Token otherlv_9=null;
        Token otherlv_11=null;
        EObject lv_type_1_0 = null;

        AntlrDatatypeRuleToken lv_dim_2_0 = null;

        EObject lv_params_5_0 = null;

        EObject lv_params_7_0 = null;

        EObject lv_body_10_0 = null;


         enterRule(); 
            
        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1195:28: ( ( ( ruleModifier )? ( (lv_type_1_0= ruleUseType ) ) ( (lv_dim_2_0= ruleDim ) )* ( (lv_name_3_0= RULE_ID ) ) otherlv_4= '(' ( ( (lv_params_5_0= ruleParameter ) ) (otherlv_6= ',' ( (lv_params_7_0= ruleParameter ) ) )* )? otherlv_8= ')' otherlv_9= '{' ( (lv_body_10_0= ruleMethodBody ) ) otherlv_11= '}' ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1196:1: ( ( ruleModifier )? ( (lv_type_1_0= ruleUseType ) ) ( (lv_dim_2_0= ruleDim ) )* ( (lv_name_3_0= RULE_ID ) ) otherlv_4= '(' ( ( (lv_params_5_0= ruleParameter ) ) (otherlv_6= ',' ( (lv_params_7_0= ruleParameter ) ) )* )? otherlv_8= ')' otherlv_9= '{' ( (lv_body_10_0= ruleMethodBody ) ) otherlv_11= '}' )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1196:1: ( ( ruleModifier )? ( (lv_type_1_0= ruleUseType ) ) ( (lv_dim_2_0= ruleDim ) )* ( (lv_name_3_0= RULE_ID ) ) otherlv_4= '(' ( ( (lv_params_5_0= ruleParameter ) ) (otherlv_6= ',' ( (lv_params_7_0= ruleParameter ) ) )* )? otherlv_8= ')' otherlv_9= '{' ( (lv_body_10_0= ruleMethodBody ) ) otherlv_11= '}' )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1196:2: ( ruleModifier )? ( (lv_type_1_0= ruleUseType ) ) ( (lv_dim_2_0= ruleDim ) )* ( (lv_name_3_0= RULE_ID ) ) otherlv_4= '(' ( ( (lv_params_5_0= ruleParameter ) ) (otherlv_6= ',' ( (lv_params_7_0= ruleParameter ) ) )* )? otherlv_8= ')' otherlv_9= '{' ( (lv_body_10_0= ruleMethodBody ) ) otherlv_11= '}'
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1196:2: ( ruleModifier )?
            int alt24=2;
            int LA24_0 = input.LA(1);

            if ( ((LA24_0>=33 && LA24_0<=34)) ) {
                alt24=1;
            }
            switch (alt24) {
                case 1 :
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1197:5: ruleModifier
                    {
                    if ( state.backtracking==0 ) {
                       
                              newCompositeNode(grammarAccess.getMethodAccess().getModifierParserRuleCall_0()); 
                          
                    }
                    pushFollow(FOLLOW_ruleModifier_in_ruleMethod2840);
                    ruleModifier();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {
                       
                              afterParserOrEnumRuleCall();
                          
                    }

                    }
                    break;

            }

            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1204:3: ( (lv_type_1_0= ruleUseType ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1205:1: (lv_type_1_0= ruleUseType )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1205:1: (lv_type_1_0= ruleUseType )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1206:3: lv_type_1_0= ruleUseType
            {
            if ( state.backtracking==0 ) {
               
              	        newCompositeNode(grammarAccess.getMethodAccess().getTypeUseTypeParserRuleCall_1_0()); 
              	    
            }
            pushFollow(FOLLOW_ruleUseType_in_ruleMethod2862);
            lv_type_1_0=ruleUseType();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              	        if (current==null) {
              	            current = createModelElementForParent(grammarAccess.getMethodRule());
              	        }
                     		set(
                     			current, 
                     			"type",
                      		lv_type_1_0, 
                      		"UseType");
              	        afterParserOrEnumRuleCall();
              	    
            }

            }


            }

            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1222:2: ( (lv_dim_2_0= ruleDim ) )*
            loop25:
            do {
                int alt25=2;
                int LA25_0 = input.LA(1);

                if ( (LA25_0==146) ) {
                    alt25=1;
                }


                switch (alt25) {
            	case 1 :
            	    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1223:1: (lv_dim_2_0= ruleDim )
            	    {
            	    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1223:1: (lv_dim_2_0= ruleDim )
            	    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1224:3: lv_dim_2_0= ruleDim
            	    {
            	    if ( state.backtracking==0 ) {
            	       
            	      	        newCompositeNode(grammarAccess.getMethodAccess().getDimDimParserRuleCall_2_0()); 
            	      	    
            	    }
            	    pushFollow(FOLLOW_ruleDim_in_ruleMethod2883);
            	    lv_dim_2_0=ruleDim();

            	    state._fsp--;
            	    if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      	        if (current==null) {
            	      	            current = createModelElementForParent(grammarAccess.getMethodRule());
            	      	        }
            	             		add(
            	             			current, 
            	             			"dim",
            	              		lv_dim_2_0, 
            	              		"Dim");
            	      	        afterParserOrEnumRuleCall();
            	      	    
            	    }

            	    }


            	    }
            	    break;

            	default :
            	    break loop25;
                }
            } while (true);

            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1240:3: ( (lv_name_3_0= RULE_ID ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1241:1: (lv_name_3_0= RULE_ID )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1241:1: (lv_name_3_0= RULE_ID )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1242:3: lv_name_3_0= RULE_ID
            {
            lv_name_3_0=(Token)match(input,RULE_ID,FOLLOW_RULE_ID_in_ruleMethod2901); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(lv_name_3_0, grammarAccess.getMethodAccess().getNameIDTerminalRuleCall_3_0()); 
              		
            }
            if ( state.backtracking==0 ) {

              	        if (current==null) {
              	            current = createModelElement(grammarAccess.getMethodRule());
              	        }
                     		setWithLastConsumed(
                     			current, 
                     			"name",
                      		lv_name_3_0, 
                      		"ID");
              	    
            }

            }


            }

            otherlv_4=(Token)match(input,52,FOLLOW_52_in_ruleMethod2918); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_4, grammarAccess.getMethodAccess().getLeftParenthesisKeyword_4());
                  
            }
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1262:1: ( ( (lv_params_5_0= ruleParameter ) ) (otherlv_6= ',' ( (lv_params_7_0= ruleParameter ) ) )* )?
            int alt27=2;
            int LA27_0 = input.LA(1);

            if ( (LA27_0==RULE_ID||(LA27_0>=37 && LA27_0<=44)) ) {
                alt27=1;
            }
            switch (alt27) {
                case 1 :
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1262:2: ( (lv_params_5_0= ruleParameter ) ) (otherlv_6= ',' ( (lv_params_7_0= ruleParameter ) ) )*
                    {
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1262:2: ( (lv_params_5_0= ruleParameter ) )
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1263:1: (lv_params_5_0= ruleParameter )
                    {
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1263:1: (lv_params_5_0= ruleParameter )
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1264:3: lv_params_5_0= ruleParameter
                    {
                    if ( state.backtracking==0 ) {
                       
                      	        newCompositeNode(grammarAccess.getMethodAccess().getParamsParameterParserRuleCall_5_0_0()); 
                      	    
                    }
                    pushFollow(FOLLOW_ruleParameter_in_ruleMethod2940);
                    lv_params_5_0=ruleParameter();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      	        if (current==null) {
                      	            current = createModelElementForParent(grammarAccess.getMethodRule());
                      	        }
                             		add(
                             			current, 
                             			"params",
                              		lv_params_5_0, 
                              		"Parameter");
                      	        afterParserOrEnumRuleCall();
                      	    
                    }

                    }


                    }

                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1280:2: (otherlv_6= ',' ( (lv_params_7_0= ruleParameter ) ) )*
                    loop26:
                    do {
                        int alt26=2;
                        int LA26_0 = input.LA(1);

                        if ( (LA26_0==53) ) {
                            alt26=1;
                        }


                        switch (alt26) {
                    	case 1 :
                    	    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1280:4: otherlv_6= ',' ( (lv_params_7_0= ruleParameter ) )
                    	    {
                    	    otherlv_6=(Token)match(input,53,FOLLOW_53_in_ruleMethod2953); if (state.failed) return current;
                    	    if ( state.backtracking==0 ) {

                    	          	newLeafNode(otherlv_6, grammarAccess.getMethodAccess().getCommaKeyword_5_1_0());
                    	          
                    	    }
                    	    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1284:1: ( (lv_params_7_0= ruleParameter ) )
                    	    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1285:1: (lv_params_7_0= ruleParameter )
                    	    {
                    	    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1285:1: (lv_params_7_0= ruleParameter )
                    	    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1286:3: lv_params_7_0= ruleParameter
                    	    {
                    	    if ( state.backtracking==0 ) {
                    	       
                    	      	        newCompositeNode(grammarAccess.getMethodAccess().getParamsParameterParserRuleCall_5_1_1_0()); 
                    	      	    
                    	    }
                    	    pushFollow(FOLLOW_ruleParameter_in_ruleMethod2974);
                    	    lv_params_7_0=ruleParameter();

                    	    state._fsp--;
                    	    if (state.failed) return current;
                    	    if ( state.backtracking==0 ) {

                    	      	        if (current==null) {
                    	      	            current = createModelElementForParent(grammarAccess.getMethodRule());
                    	      	        }
                    	             		add(
                    	             			current, 
                    	             			"params",
                    	              		lv_params_7_0, 
                    	              		"Parameter");
                    	      	        afterParserOrEnumRuleCall();
                    	      	    
                    	    }

                    	    }


                    	    }


                    	    }
                    	    break;

                    	default :
                    	    break loop26;
                        }
                    } while (true);


                    }
                    break;

            }

            otherlv_8=(Token)match(input,54,FOLLOW_54_in_ruleMethod2990); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_8, grammarAccess.getMethodAccess().getRightParenthesisKeyword_6());
                  
            }
            otherlv_9=(Token)match(input,47,FOLLOW_47_in_ruleMethod3002); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_9, grammarAccess.getMethodAccess().getLeftCurlyBracketKeyword_7());
                  
            }
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1310:1: ( (lv_body_10_0= ruleMethodBody ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1311:1: (lv_body_10_0= ruleMethodBody )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1311:1: (lv_body_10_0= ruleMethodBody )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1312:3: lv_body_10_0= ruleMethodBody
            {
            if ( state.backtracking==0 ) {
               
              	        newCompositeNode(grammarAccess.getMethodAccess().getBodyMethodBodyParserRuleCall_8_0()); 
              	    
            }
            pushFollow(FOLLOW_ruleMethodBody_in_ruleMethod3023);
            lv_body_10_0=ruleMethodBody();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              	        if (current==null) {
              	            current = createModelElementForParent(grammarAccess.getMethodRule());
              	        }
                     		set(
                     			current, 
                     			"body",
                      		lv_body_10_0, 
                      		"MethodBody");
              	        afterParserOrEnumRuleCall();
              	    
            }

            }


            }

            otherlv_11=(Token)match(input,48,FOLLOW_48_in_ruleMethod3035); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_11, grammarAccess.getMethodAccess().getRightCurlyBracketKeyword_9());
                  
            }

            }


            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleMethod"


    // $ANTLR start "entryRuleAbstractMethod"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1340:1: entryRuleAbstractMethod returns [EObject current=null] : iv_ruleAbstractMethod= ruleAbstractMethod EOF ;
    public final EObject entryRuleAbstractMethod() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleAbstractMethod = null;


        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1341:2: (iv_ruleAbstractMethod= ruleAbstractMethod EOF )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1342:2: iv_ruleAbstractMethod= ruleAbstractMethod EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getAbstractMethodRule()); 
            }
            pushFollow(FOLLOW_ruleAbstractMethod_in_entryRuleAbstractMethod3071);
            iv_ruleAbstractMethod=ruleAbstractMethod();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleAbstractMethod; 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRuleAbstractMethod3081); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleAbstractMethod"


    // $ANTLR start "ruleAbstractMethod"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1349:1: ruleAbstractMethod returns [EObject current=null] : (this_AbstractContinuousMethod_0= ruleAbstractContinuousMethod | this_AbstractDiscreteMethod_1= ruleAbstractDiscreteMethod | this_NativeStartMethod_2= ruleNativeStartMethod | this_AbstractCompositionMethod_3= ruleAbstractCompositionMethod | this_AbstractInitMethod_4= ruleAbstractInitMethod | ( ( ruleModifier )? ( ruleBuiltInModifier )? ( (lv_type_7_0= ruleUseType ) ) ( (lv_name_8_0= RULE_ID ) ) otherlv_9= '(' ( ( (lv_params_10_0= ruleParameter ) ) (otherlv_11= ',' ( (lv_params_12_0= ruleParameter ) ) )* )? otherlv_13= ')' (otherlv_14= '{' ( (lv_body_15_0= ruleAbstractMethodBody ) ) otherlv_16= '}' )? otherlv_17= ';' ) ) ;
    public final EObject ruleAbstractMethod() throws RecognitionException {
        EObject current = null;

        Token lv_name_8_0=null;
        Token otherlv_9=null;
        Token otherlv_11=null;
        Token otherlv_13=null;
        Token otherlv_14=null;
        Token otherlv_16=null;
        Token otherlv_17=null;
        EObject this_AbstractContinuousMethod_0 = null;

        EObject this_AbstractDiscreteMethod_1 = null;

        EObject this_NativeStartMethod_2 = null;

        EObject this_AbstractCompositionMethod_3 = null;

        EObject this_AbstractInitMethod_4 = null;

        EObject lv_type_7_0 = null;

        EObject lv_params_10_0 = null;

        EObject lv_params_12_0 = null;

        EObject lv_body_15_0 = null;


         enterRule(); 
            
        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1352:28: ( (this_AbstractContinuousMethod_0= ruleAbstractContinuousMethod | this_AbstractDiscreteMethod_1= ruleAbstractDiscreteMethod | this_NativeStartMethod_2= ruleNativeStartMethod | this_AbstractCompositionMethod_3= ruleAbstractCompositionMethod | this_AbstractInitMethod_4= ruleAbstractInitMethod | ( ( ruleModifier )? ( ruleBuiltInModifier )? ( (lv_type_7_0= ruleUseType ) ) ( (lv_name_8_0= RULE_ID ) ) otherlv_9= '(' ( ( (lv_params_10_0= ruleParameter ) ) (otherlv_11= ',' ( (lv_params_12_0= ruleParameter ) ) )* )? otherlv_13= ')' (otherlv_14= '{' ( (lv_body_15_0= ruleAbstractMethodBody ) ) otherlv_16= '}' )? otherlv_17= ';' ) ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1353:1: (this_AbstractContinuousMethod_0= ruleAbstractContinuousMethod | this_AbstractDiscreteMethod_1= ruleAbstractDiscreteMethod | this_NativeStartMethod_2= ruleNativeStartMethod | this_AbstractCompositionMethod_3= ruleAbstractCompositionMethod | this_AbstractInitMethod_4= ruleAbstractInitMethod | ( ( ruleModifier )? ( ruleBuiltInModifier )? ( (lv_type_7_0= ruleUseType ) ) ( (lv_name_8_0= RULE_ID ) ) otherlv_9= '(' ( ( (lv_params_10_0= ruleParameter ) ) (otherlv_11= ',' ( (lv_params_12_0= ruleParameter ) ) )* )? otherlv_13= ')' (otherlv_14= '{' ( (lv_body_15_0= ruleAbstractMethodBody ) ) otherlv_16= '}' )? otherlv_17= ';' ) )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1353:1: (this_AbstractContinuousMethod_0= ruleAbstractContinuousMethod | this_AbstractDiscreteMethod_1= ruleAbstractDiscreteMethod | this_NativeStartMethod_2= ruleNativeStartMethod | this_AbstractCompositionMethod_3= ruleAbstractCompositionMethod | this_AbstractInitMethod_4= ruleAbstractInitMethod | ( ( ruleModifier )? ( ruleBuiltInModifier )? ( (lv_type_7_0= ruleUseType ) ) ( (lv_name_8_0= RULE_ID ) ) otherlv_9= '(' ( ( (lv_params_10_0= ruleParameter ) ) (otherlv_11= ',' ( (lv_params_12_0= ruleParameter ) ) )* )? otherlv_13= ')' (otherlv_14= '{' ( (lv_body_15_0= ruleAbstractMethodBody ) ) otherlv_16= '}' )? otherlv_17= ';' ) )
            int alt33=6;
            alt33 = dfa33.predict(input);
            switch (alt33) {
                case 1 :
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1354:5: this_AbstractContinuousMethod_0= ruleAbstractContinuousMethod
                    {
                    if ( state.backtracking==0 ) {
                       
                              newCompositeNode(grammarAccess.getAbstractMethodAccess().getAbstractContinuousMethodParserRuleCall_0()); 
                          
                    }
                    pushFollow(FOLLOW_ruleAbstractContinuousMethod_in_ruleAbstractMethod3128);
                    this_AbstractContinuousMethod_0=ruleAbstractContinuousMethod();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {
                       
                              current = this_AbstractContinuousMethod_0; 
                              afterParserOrEnumRuleCall();
                          
                    }

                    }
                    break;
                case 2 :
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1364:5: this_AbstractDiscreteMethod_1= ruleAbstractDiscreteMethod
                    {
                    if ( state.backtracking==0 ) {
                       
                              newCompositeNode(grammarAccess.getAbstractMethodAccess().getAbstractDiscreteMethodParserRuleCall_1()); 
                          
                    }
                    pushFollow(FOLLOW_ruleAbstractDiscreteMethod_in_ruleAbstractMethod3155);
                    this_AbstractDiscreteMethod_1=ruleAbstractDiscreteMethod();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {
                       
                              current = this_AbstractDiscreteMethod_1; 
                              afterParserOrEnumRuleCall();
                          
                    }

                    }
                    break;
                case 3 :
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1374:5: this_NativeStartMethod_2= ruleNativeStartMethod
                    {
                    if ( state.backtracking==0 ) {
                       
                              newCompositeNode(grammarAccess.getAbstractMethodAccess().getNativeStartMethodParserRuleCall_2()); 
                          
                    }
                    pushFollow(FOLLOW_ruleNativeStartMethod_in_ruleAbstractMethod3182);
                    this_NativeStartMethod_2=ruleNativeStartMethod();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {
                       
                              current = this_NativeStartMethod_2; 
                              afterParserOrEnumRuleCall();
                          
                    }

                    }
                    break;
                case 4 :
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1384:5: this_AbstractCompositionMethod_3= ruleAbstractCompositionMethod
                    {
                    if ( state.backtracking==0 ) {
                       
                              newCompositeNode(grammarAccess.getAbstractMethodAccess().getAbstractCompositionMethodParserRuleCall_3()); 
                          
                    }
                    pushFollow(FOLLOW_ruleAbstractCompositionMethod_in_ruleAbstractMethod3209);
                    this_AbstractCompositionMethod_3=ruleAbstractCompositionMethod();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {
                       
                              current = this_AbstractCompositionMethod_3; 
                              afterParserOrEnumRuleCall();
                          
                    }

                    }
                    break;
                case 5 :
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1394:5: this_AbstractInitMethod_4= ruleAbstractInitMethod
                    {
                    if ( state.backtracking==0 ) {
                       
                              newCompositeNode(grammarAccess.getAbstractMethodAccess().getAbstractInitMethodParserRuleCall_4()); 
                          
                    }
                    pushFollow(FOLLOW_ruleAbstractInitMethod_in_ruleAbstractMethod3236);
                    this_AbstractInitMethod_4=ruleAbstractInitMethod();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {
                       
                              current = this_AbstractInitMethod_4; 
                              afterParserOrEnumRuleCall();
                          
                    }

                    }
                    break;
                case 6 :
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1403:6: ( ( ruleModifier )? ( ruleBuiltInModifier )? ( (lv_type_7_0= ruleUseType ) ) ( (lv_name_8_0= RULE_ID ) ) otherlv_9= '(' ( ( (lv_params_10_0= ruleParameter ) ) (otherlv_11= ',' ( (lv_params_12_0= ruleParameter ) ) )* )? otherlv_13= ')' (otherlv_14= '{' ( (lv_body_15_0= ruleAbstractMethodBody ) ) otherlv_16= '}' )? otherlv_17= ';' )
                    {
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1403:6: ( ( ruleModifier )? ( ruleBuiltInModifier )? ( (lv_type_7_0= ruleUseType ) ) ( (lv_name_8_0= RULE_ID ) ) otherlv_9= '(' ( ( (lv_params_10_0= ruleParameter ) ) (otherlv_11= ',' ( (lv_params_12_0= ruleParameter ) ) )* )? otherlv_13= ')' (otherlv_14= '{' ( (lv_body_15_0= ruleAbstractMethodBody ) ) otherlv_16= '}' )? otherlv_17= ';' )
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1403:7: ( ruleModifier )? ( ruleBuiltInModifier )? ( (lv_type_7_0= ruleUseType ) ) ( (lv_name_8_0= RULE_ID ) ) otherlv_9= '(' ( ( (lv_params_10_0= ruleParameter ) ) (otherlv_11= ',' ( (lv_params_12_0= ruleParameter ) ) )* )? otherlv_13= ')' (otherlv_14= '{' ( (lv_body_15_0= ruleAbstractMethodBody ) ) otherlv_16= '}' )? otherlv_17= ';'
                    {
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1403:7: ( ruleModifier )?
                    int alt28=2;
                    int LA28_0 = input.LA(1);

                    if ( ((LA28_0>=33 && LA28_0<=34)) ) {
                        alt28=1;
                    }
                    switch (alt28) {
                        case 1 :
                            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1404:5: ruleModifier
                            {
                            if ( state.backtracking==0 ) {
                               
                                      newCompositeNode(grammarAccess.getAbstractMethodAccess().getModifierParserRuleCall_5_0()); 
                                  
                            }
                            pushFollow(FOLLOW_ruleModifier_in_ruleAbstractMethod3259);
                            ruleModifier();

                            state._fsp--;
                            if (state.failed) return current;
                            if ( state.backtracking==0 ) {
                               
                                      afterParserOrEnumRuleCall();
                                  
                            }

                            }
                            break;

                    }

                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1411:3: ( ruleBuiltInModifier )?
                    int alt29=2;
                    int LA29_0 = input.LA(1);

                    if ( (LA29_0==36) ) {
                        alt29=1;
                    }
                    switch (alt29) {
                        case 1 :
                            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1412:5: ruleBuiltInModifier
                            {
                            if ( state.backtracking==0 ) {
                               
                                      newCompositeNode(grammarAccess.getAbstractMethodAccess().getBuiltInModifierParserRuleCall_5_1()); 
                                  
                            }
                            pushFollow(FOLLOW_ruleBuiltInModifier_in_ruleAbstractMethod3277);
                            ruleBuiltInModifier();

                            state._fsp--;
                            if (state.failed) return current;
                            if ( state.backtracking==0 ) {
                               
                                      afterParserOrEnumRuleCall();
                                  
                            }

                            }
                            break;

                    }

                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1419:3: ( (lv_type_7_0= ruleUseType ) )
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1420:1: (lv_type_7_0= ruleUseType )
                    {
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1420:1: (lv_type_7_0= ruleUseType )
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1421:3: lv_type_7_0= ruleUseType
                    {
                    if ( state.backtracking==0 ) {
                       
                      	        newCompositeNode(grammarAccess.getAbstractMethodAccess().getTypeUseTypeParserRuleCall_5_2_0()); 
                      	    
                    }
                    pushFollow(FOLLOW_ruleUseType_in_ruleAbstractMethod3299);
                    lv_type_7_0=ruleUseType();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      	        if (current==null) {
                      	            current = createModelElementForParent(grammarAccess.getAbstractMethodRule());
                      	        }
                             		set(
                             			current, 
                             			"type",
                              		lv_type_7_0, 
                              		"UseType");
                      	        afterParserOrEnumRuleCall();
                      	    
                    }

                    }


                    }

                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1437:2: ( (lv_name_8_0= RULE_ID ) )
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1438:1: (lv_name_8_0= RULE_ID )
                    {
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1438:1: (lv_name_8_0= RULE_ID )
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1439:3: lv_name_8_0= RULE_ID
                    {
                    lv_name_8_0=(Token)match(input,RULE_ID,FOLLOW_RULE_ID_in_ruleAbstractMethod3316); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      			newLeafNode(lv_name_8_0, grammarAccess.getAbstractMethodAccess().getNameIDTerminalRuleCall_5_3_0()); 
                      		
                    }
                    if ( state.backtracking==0 ) {

                      	        if (current==null) {
                      	            current = createModelElement(grammarAccess.getAbstractMethodRule());
                      	        }
                             		setWithLastConsumed(
                             			current, 
                             			"name",
                              		lv_name_8_0, 
                              		"ID");
                      	    
                    }

                    }


                    }

                    otherlv_9=(Token)match(input,52,FOLLOW_52_in_ruleAbstractMethod3333); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                          	newLeafNode(otherlv_9, grammarAccess.getAbstractMethodAccess().getLeftParenthesisKeyword_5_4());
                          
                    }
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1459:1: ( ( (lv_params_10_0= ruleParameter ) ) (otherlv_11= ',' ( (lv_params_12_0= ruleParameter ) ) )* )?
                    int alt31=2;
                    int LA31_0 = input.LA(1);

                    if ( (LA31_0==RULE_ID||(LA31_0>=37 && LA31_0<=44)) ) {
                        alt31=1;
                    }
                    switch (alt31) {
                        case 1 :
                            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1459:2: ( (lv_params_10_0= ruleParameter ) ) (otherlv_11= ',' ( (lv_params_12_0= ruleParameter ) ) )*
                            {
                            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1459:2: ( (lv_params_10_0= ruleParameter ) )
                            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1460:1: (lv_params_10_0= ruleParameter )
                            {
                            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1460:1: (lv_params_10_0= ruleParameter )
                            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1461:3: lv_params_10_0= ruleParameter
                            {
                            if ( state.backtracking==0 ) {
                               
                              	        newCompositeNode(grammarAccess.getAbstractMethodAccess().getParamsParameterParserRuleCall_5_5_0_0()); 
                              	    
                            }
                            pushFollow(FOLLOW_ruleParameter_in_ruleAbstractMethod3355);
                            lv_params_10_0=ruleParameter();

                            state._fsp--;
                            if (state.failed) return current;
                            if ( state.backtracking==0 ) {

                              	        if (current==null) {
                              	            current = createModelElementForParent(grammarAccess.getAbstractMethodRule());
                              	        }
                                     		add(
                                     			current, 
                                     			"params",
                                      		lv_params_10_0, 
                                      		"Parameter");
                              	        afterParserOrEnumRuleCall();
                              	    
                            }

                            }


                            }

                            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1477:2: (otherlv_11= ',' ( (lv_params_12_0= ruleParameter ) ) )*
                            loop30:
                            do {
                                int alt30=2;
                                int LA30_0 = input.LA(1);

                                if ( (LA30_0==53) ) {
                                    alt30=1;
                                }


                                switch (alt30) {
                            	case 1 :
                            	    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1477:4: otherlv_11= ',' ( (lv_params_12_0= ruleParameter ) )
                            	    {
                            	    otherlv_11=(Token)match(input,53,FOLLOW_53_in_ruleAbstractMethod3368); if (state.failed) return current;
                            	    if ( state.backtracking==0 ) {

                            	          	newLeafNode(otherlv_11, grammarAccess.getAbstractMethodAccess().getCommaKeyword_5_5_1_0());
                            	          
                            	    }
                            	    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1481:1: ( (lv_params_12_0= ruleParameter ) )
                            	    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1482:1: (lv_params_12_0= ruleParameter )
                            	    {
                            	    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1482:1: (lv_params_12_0= ruleParameter )
                            	    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1483:3: lv_params_12_0= ruleParameter
                            	    {
                            	    if ( state.backtracking==0 ) {
                            	       
                            	      	        newCompositeNode(grammarAccess.getAbstractMethodAccess().getParamsParameterParserRuleCall_5_5_1_1_0()); 
                            	      	    
                            	    }
                            	    pushFollow(FOLLOW_ruleParameter_in_ruleAbstractMethod3389);
                            	    lv_params_12_0=ruleParameter();

                            	    state._fsp--;
                            	    if (state.failed) return current;
                            	    if ( state.backtracking==0 ) {

                            	      	        if (current==null) {
                            	      	            current = createModelElementForParent(grammarAccess.getAbstractMethodRule());
                            	      	        }
                            	             		add(
                            	             			current, 
                            	             			"params",
                            	              		lv_params_12_0, 
                            	              		"Parameter");
                            	      	        afterParserOrEnumRuleCall();
                            	      	    
                            	    }

                            	    }


                            	    }


                            	    }
                            	    break;

                            	default :
                            	    break loop30;
                                }
                            } while (true);


                            }
                            break;

                    }

                    otherlv_13=(Token)match(input,54,FOLLOW_54_in_ruleAbstractMethod3405); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                          	newLeafNode(otherlv_13, grammarAccess.getAbstractMethodAccess().getRightParenthesisKeyword_5_6());
                          
                    }
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1503:1: (otherlv_14= '{' ( (lv_body_15_0= ruleAbstractMethodBody ) ) otherlv_16= '}' )?
                    int alt32=2;
                    int LA32_0 = input.LA(1);

                    if ( (LA32_0==47) ) {
                        alt32=1;
                    }
                    switch (alt32) {
                        case 1 :
                            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1503:3: otherlv_14= '{' ( (lv_body_15_0= ruleAbstractMethodBody ) ) otherlv_16= '}'
                            {
                            otherlv_14=(Token)match(input,47,FOLLOW_47_in_ruleAbstractMethod3418); if (state.failed) return current;
                            if ( state.backtracking==0 ) {

                                  	newLeafNode(otherlv_14, grammarAccess.getAbstractMethodAccess().getLeftCurlyBracketKeyword_5_7_0());
                                  
                            }
                            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1507:1: ( (lv_body_15_0= ruleAbstractMethodBody ) )
                            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1508:1: (lv_body_15_0= ruleAbstractMethodBody )
                            {
                            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1508:1: (lv_body_15_0= ruleAbstractMethodBody )
                            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1509:3: lv_body_15_0= ruleAbstractMethodBody
                            {
                            if ( state.backtracking==0 ) {
                               
                              	        newCompositeNode(grammarAccess.getAbstractMethodAccess().getBodyAbstractMethodBodyParserRuleCall_5_7_1_0()); 
                              	    
                            }
                            pushFollow(FOLLOW_ruleAbstractMethodBody_in_ruleAbstractMethod3439);
                            lv_body_15_0=ruleAbstractMethodBody();

                            state._fsp--;
                            if (state.failed) return current;
                            if ( state.backtracking==0 ) {

                              	        if (current==null) {
                              	            current = createModelElementForParent(grammarAccess.getAbstractMethodRule());
                              	        }
                                     		set(
                                     			current, 
                                     			"body",
                                      		lv_body_15_0, 
                                      		"AbstractMethodBody");
                              	        afterParserOrEnumRuleCall();
                              	    
                            }

                            }


                            }

                            otherlv_16=(Token)match(input,48,FOLLOW_48_in_ruleAbstractMethod3451); if (state.failed) return current;
                            if ( state.backtracking==0 ) {

                                  	newLeafNode(otherlv_16, grammarAccess.getAbstractMethodAccess().getRightCurlyBracketKeyword_5_7_2());
                                  
                            }

                            }
                            break;

                    }

                    otherlv_17=(Token)match(input,29,FOLLOW_29_in_ruleAbstractMethod3465); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                          	newLeafNode(otherlv_17, grammarAccess.getAbstractMethodAccess().getSemicolonKeyword_5_8());
                          
                    }

                    }


                    }
                    break;

            }


            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleAbstractMethod"


    // $ANTLR start "entryRuleUseType"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1541:1: entryRuleUseType returns [EObject current=null] : iv_ruleUseType= ruleUseType EOF ;
    public final EObject entryRuleUseType() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleUseType = null;


        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1542:2: (iv_ruleUseType= ruleUseType EOF )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1543:2: iv_ruleUseType= ruleUseType EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getUseTypeRule()); 
            }
            pushFollow(FOLLOW_ruleUseType_in_entryRuleUseType3502);
            iv_ruleUseType=ruleUseType();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleUseType; 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRuleUseType3512); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleUseType"


    // $ANTLR start "ruleUseType"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1550:1: ruleUseType returns [EObject current=null] : ( ( (otherlv_0= RULE_ID ) ) | ( (lv_type_1_0= ruleNonRefType ) ) ) ;
    public final EObject ruleUseType() throws RecognitionException {
        EObject current = null;

        Token otherlv_0=null;
        EObject lv_type_1_0 = null;


         enterRule(); 
            
        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1553:28: ( ( ( (otherlv_0= RULE_ID ) ) | ( (lv_type_1_0= ruleNonRefType ) ) ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1554:1: ( ( (otherlv_0= RULE_ID ) ) | ( (lv_type_1_0= ruleNonRefType ) ) )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1554:1: ( ( (otherlv_0= RULE_ID ) ) | ( (lv_type_1_0= ruleNonRefType ) ) )
            int alt34=2;
            int LA34_0 = input.LA(1);

            if ( (LA34_0==RULE_ID) ) {
                alt34=1;
            }
            else if ( ((LA34_0>=37 && LA34_0<=44)) ) {
                alt34=2;
            }
            else {
                if (state.backtracking>0) {state.failed=true; return current;}
                NoViableAltException nvae =
                    new NoViableAltException("", 34, 0, input);

                throw nvae;
            }
            switch (alt34) {
                case 1 :
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1554:2: ( (otherlv_0= RULE_ID ) )
                    {
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1554:2: ( (otherlv_0= RULE_ID ) )
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1555:1: (otherlv_0= RULE_ID )
                    {
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1555:1: (otherlv_0= RULE_ID )
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1556:3: otherlv_0= RULE_ID
                    {
                    if ( state.backtracking==0 ) {

                      			if (current==null) {
                      	            current = createModelElement(grammarAccess.getUseTypeRule());
                      	        }
                              
                    }
                    otherlv_0=(Token)match(input,RULE_ID,FOLLOW_RULE_ID_in_ruleUseType3557); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      		newLeafNode(otherlv_0, grammarAccess.getUseTypeAccess().getReftypeRefTypeCrossReference_0_0()); 
                      	
                    }

                    }


                    }


                    }
                    break;
                case 2 :
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1568:6: ( (lv_type_1_0= ruleNonRefType ) )
                    {
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1568:6: ( (lv_type_1_0= ruleNonRefType ) )
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1569:1: (lv_type_1_0= ruleNonRefType )
                    {
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1569:1: (lv_type_1_0= ruleNonRefType )
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1570:3: lv_type_1_0= ruleNonRefType
                    {
                    if ( state.backtracking==0 ) {
                       
                      	        newCompositeNode(grammarAccess.getUseTypeAccess().getTypeNonRefTypeParserRuleCall_1_0()); 
                      	    
                    }
                    pushFollow(FOLLOW_ruleNonRefType_in_ruleUseType3584);
                    lv_type_1_0=ruleNonRefType();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      	        if (current==null) {
                      	            current = createModelElementForParent(grammarAccess.getUseTypeRule());
                      	        }
                             		set(
                             			current, 
                             			"type",
                              		lv_type_1_0, 
                              		"NonRefType");
                      	        afterParserOrEnumRuleCall();
                      	    
                    }

                    }


                    }


                    }
                    break;

            }


            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleUseType"


    // $ANTLR start "entryRuleParameter"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1594:1: entryRuleParameter returns [EObject current=null] : iv_ruleParameter= ruleParameter EOF ;
    public final EObject entryRuleParameter() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleParameter = null;


        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1595:2: (iv_ruleParameter= ruleParameter EOF )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1596:2: iv_ruleParameter= ruleParameter EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getParameterRule()); 
            }
            pushFollow(FOLLOW_ruleParameter_in_entryRuleParameter3620);
            iv_ruleParameter=ruleParameter();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleParameter; 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRuleParameter3630); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleParameter"


    // $ANTLR start "ruleParameter"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1603:1: ruleParameter returns [EObject current=null] : ( ( (lv_type_0_0= ruleUseType ) ) ( (lv_dim_1_0= ruleDim ) )* ( (lv_name_2_0= RULE_ID ) ) ) ;
    public final EObject ruleParameter() throws RecognitionException {
        EObject current = null;

        Token lv_name_2_0=null;
        EObject lv_type_0_0 = null;

        AntlrDatatypeRuleToken lv_dim_1_0 = null;


         enterRule(); 
            
        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1606:28: ( ( ( (lv_type_0_0= ruleUseType ) ) ( (lv_dim_1_0= ruleDim ) )* ( (lv_name_2_0= RULE_ID ) ) ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1607:1: ( ( (lv_type_0_0= ruleUseType ) ) ( (lv_dim_1_0= ruleDim ) )* ( (lv_name_2_0= RULE_ID ) ) )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1607:1: ( ( (lv_type_0_0= ruleUseType ) ) ( (lv_dim_1_0= ruleDim ) )* ( (lv_name_2_0= RULE_ID ) ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1607:2: ( (lv_type_0_0= ruleUseType ) ) ( (lv_dim_1_0= ruleDim ) )* ( (lv_name_2_0= RULE_ID ) )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1607:2: ( (lv_type_0_0= ruleUseType ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1608:1: (lv_type_0_0= ruleUseType )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1608:1: (lv_type_0_0= ruleUseType )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1609:3: lv_type_0_0= ruleUseType
            {
            if ( state.backtracking==0 ) {
               
              	        newCompositeNode(grammarAccess.getParameterAccess().getTypeUseTypeParserRuleCall_0_0()); 
              	    
            }
            pushFollow(FOLLOW_ruleUseType_in_ruleParameter3676);
            lv_type_0_0=ruleUseType();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              	        if (current==null) {
              	            current = createModelElementForParent(grammarAccess.getParameterRule());
              	        }
                     		set(
                     			current, 
                     			"type",
                      		lv_type_0_0, 
                      		"UseType");
              	        afterParserOrEnumRuleCall();
              	    
            }

            }


            }

            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1625:2: ( (lv_dim_1_0= ruleDim ) )*
            loop35:
            do {
                int alt35=2;
                int LA35_0 = input.LA(1);

                if ( (LA35_0==146) ) {
                    alt35=1;
                }


                switch (alt35) {
            	case 1 :
            	    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1626:1: (lv_dim_1_0= ruleDim )
            	    {
            	    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1626:1: (lv_dim_1_0= ruleDim )
            	    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1627:3: lv_dim_1_0= ruleDim
            	    {
            	    if ( state.backtracking==0 ) {
            	       
            	      	        newCompositeNode(grammarAccess.getParameterAccess().getDimDimParserRuleCall_1_0()); 
            	      	    
            	    }
            	    pushFollow(FOLLOW_ruleDim_in_ruleParameter3697);
            	    lv_dim_1_0=ruleDim();

            	    state._fsp--;
            	    if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      	        if (current==null) {
            	      	            current = createModelElementForParent(grammarAccess.getParameterRule());
            	      	        }
            	             		add(
            	             			current, 
            	             			"dim",
            	              		lv_dim_1_0, 
            	              		"Dim");
            	      	        afterParserOrEnumRuleCall();
            	      	    
            	    }

            	    }


            	    }
            	    break;

            	default :
            	    break loop35;
                }
            } while (true);

            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1643:3: ( (lv_name_2_0= RULE_ID ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1644:1: (lv_name_2_0= RULE_ID )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1644:1: (lv_name_2_0= RULE_ID )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1645:3: lv_name_2_0= RULE_ID
            {
            lv_name_2_0=(Token)match(input,RULE_ID,FOLLOW_RULE_ID_in_ruleParameter3715); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(lv_name_2_0, grammarAccess.getParameterAccess().getNameIDTerminalRuleCall_2_0()); 
              		
            }
            if ( state.backtracking==0 ) {

              	        if (current==null) {
              	            current = createModelElement(grammarAccess.getParameterRule());
              	        }
                     		setWithLastConsumed(
                     			current, 
                     			"name",
                      		lv_name_2_0, 
                      		"ID");
              	    
            }

            }


            }


            }


            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleParameter"


    // $ANTLR start "entryRuleMethodBody"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1671:1: entryRuleMethodBody returns [EObject current=null] : iv_ruleMethodBody= ruleMethodBody EOF ;
    public final EObject entryRuleMethodBody() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleMethodBody = null;


        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1672:2: (iv_ruleMethodBody= ruleMethodBody EOF )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1673:2: iv_ruleMethodBody= ruleMethodBody EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getMethodBodyRule()); 
            }
            pushFollow(FOLLOW_ruleMethodBody_in_entryRuleMethodBody3758);
            iv_ruleMethodBody=ruleMethodBody();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleMethodBody; 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRuleMethodBody3768); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleMethodBody"


    // $ANTLR start "ruleMethodBody"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1680:1: ruleMethodBody returns [EObject current=null] : ( () ( (lv_statements_1_0= ruleBlockStatement ) )* ) ;
    public final EObject ruleMethodBody() throws RecognitionException {
        EObject current = null;

        EObject lv_statements_1_0 = null;


         enterRule(); 
            
        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1683:28: ( ( () ( (lv_statements_1_0= ruleBlockStatement ) )* ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1684:1: ( () ( (lv_statements_1_0= ruleBlockStatement ) )* )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1684:1: ( () ( (lv_statements_1_0= ruleBlockStatement ) )* )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1684:2: () ( (lv_statements_1_0= ruleBlockStatement ) )*
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1684:2: ()
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1685:5: 
            {
            if ( state.backtracking==0 ) {

                      current = forceCreateModelElement(
                          grammarAccess.getMethodBodyAccess().getBodyAction_0(),
                          current);
                  
            }

            }

            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1690:2: ( (lv_statements_1_0= ruleBlockStatement ) )*
            loop36:
            do {
                int alt36=2;
                int LA36_0 = input.LA(1);

                if ( (LA36_0==RULE_ID||(LA36_0>=RULE_FLOATING_POINT_LITERAL && LA36_0<=RULE_DECIMAL_LITERAL)||LA36_0==29||LA36_0==35||(LA36_0>=37 && LA36_0<=44)||LA36_0==47||LA36_0==52||LA36_0==55||LA36_0==57||(LA36_0>=89 && LA36_0<=90)||(LA36_0>=94 && LA36_0<=97)||(LA36_0>=102 && LA36_0<=106)||(LA36_0>=109 && LA36_0<=138)||(LA36_0>=140 && LA36_0<=143)||LA36_0==145) ) {
                    alt36=1;
                }


                switch (alt36) {
            	case 1 :
            	    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1691:1: (lv_statements_1_0= ruleBlockStatement )
            	    {
            	    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1691:1: (lv_statements_1_0= ruleBlockStatement )
            	    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1692:3: lv_statements_1_0= ruleBlockStatement
            	    {
            	    if ( state.backtracking==0 ) {
            	       
            	      	        newCompositeNode(grammarAccess.getMethodBodyAccess().getStatementsBlockStatementParserRuleCall_1_0()); 
            	      	    
            	    }
            	    pushFollow(FOLLOW_ruleBlockStatement_in_ruleMethodBody3823);
            	    lv_statements_1_0=ruleBlockStatement();

            	    state._fsp--;
            	    if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      	        if (current==null) {
            	      	            current = createModelElementForParent(grammarAccess.getMethodBodyRule());
            	      	        }
            	             		add(
            	             			current, 
            	             			"statements",
            	              		lv_statements_1_0, 
            	              		"BlockStatement");
            	      	        afterParserOrEnumRuleCall();
            	      	    
            	    }

            	    }


            	    }
            	    break;

            	default :
            	    break loop36;
                }
            } while (true);


            }


            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleMethodBody"


    // $ANTLR start "entryRuleAbstractMethodBody"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1716:1: entryRuleAbstractMethodBody returns [EObject current=null] : iv_ruleAbstractMethodBody= ruleAbstractMethodBody EOF ;
    public final EObject entryRuleAbstractMethodBody() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleAbstractMethodBody = null;


        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1717:2: (iv_ruleAbstractMethodBody= ruleAbstractMethodBody EOF )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1718:2: iv_ruleAbstractMethodBody= ruleAbstractMethodBody EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getAbstractMethodBodyRule()); 
            }
            pushFollow(FOLLOW_ruleAbstractMethodBody_in_entryRuleAbstractMethodBody3860);
            iv_ruleAbstractMethodBody=ruleAbstractMethodBody();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleAbstractMethodBody; 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRuleAbstractMethodBody3870); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleAbstractMethodBody"


    // $ANTLR start "ruleAbstractMethodBody"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1725:1: ruleAbstractMethodBody returns [EObject current=null] : this_RequiresAbstractComposition_0= ruleRequiresAbstractComposition ;
    public final EObject ruleAbstractMethodBody() throws RecognitionException {
        EObject current = null;

        EObject this_RequiresAbstractComposition_0 = null;


         enterRule(); 
            
        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1728:28: (this_RequiresAbstractComposition_0= ruleRequiresAbstractComposition )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1730:5: this_RequiresAbstractComposition_0= ruleRequiresAbstractComposition
            {
            if ( state.backtracking==0 ) {
               
                      newCompositeNode(grammarAccess.getAbstractMethodBodyAccess().getRequiresAbstractCompositionParserRuleCall()); 
                  
            }
            pushFollow(FOLLOW_ruleRequiresAbstractComposition_in_ruleAbstractMethodBody3916);
            this_RequiresAbstractComposition_0=ruleRequiresAbstractComposition();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               
                      current = this_RequiresAbstractComposition_0; 
                      afterParserOrEnumRuleCall();
                  
            }

            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleAbstractMethodBody"


    // $ANTLR start "entryRuleLocalVarName"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1746:1: entryRuleLocalVarName returns [String current=null] : iv_ruleLocalVarName= ruleLocalVarName EOF ;
    public final String entryRuleLocalVarName() throws RecognitionException {
        String current = null;

        AntlrDatatypeRuleToken iv_ruleLocalVarName = null;


        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1747:2: (iv_ruleLocalVarName= ruleLocalVarName EOF )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1748:2: iv_ruleLocalVarName= ruleLocalVarName EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getLocalVarNameRule()); 
            }
            pushFollow(FOLLOW_ruleLocalVarName_in_entryRuleLocalVarName3951);
            iv_ruleLocalVarName=ruleLocalVarName();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleLocalVarName.getText(); 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRuleLocalVarName3962); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleLocalVarName"


    // $ANTLR start "ruleLocalVarName"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1755:1: ruleLocalVarName returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : this_ID_0= RULE_ID ;
    public final AntlrDatatypeRuleToken ruleLocalVarName() throws RecognitionException {
        AntlrDatatypeRuleToken current = new AntlrDatatypeRuleToken();

        Token this_ID_0=null;

         enterRule(); 
            
        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1758:28: (this_ID_0= RULE_ID )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1759:5: this_ID_0= RULE_ID
            {
            this_ID_0=(Token)match(input,RULE_ID,FOLLOW_RULE_ID_in_ruleLocalVarName4001); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              		current.merge(this_ID_0);
                  
            }
            if ( state.backtracking==0 ) {
               
                  newLeafNode(this_ID_0, grammarAccess.getLocalVarNameAccess().getIDTerminalRuleCall()); 
                  
            }

            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleLocalVarName"


    // $ANTLR start "entryRuleVariableInitializer"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1774:1: entryRuleVariableInitializer returns [EObject current=null] : iv_ruleVariableInitializer= ruleVariableInitializer EOF ;
    public final EObject entryRuleVariableInitializer() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleVariableInitializer = null;


        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1775:2: (iv_ruleVariableInitializer= ruleVariableInitializer EOF )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1776:2: iv_ruleVariableInitializer= ruleVariableInitializer EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getVariableInitializerRule()); 
            }
            pushFollow(FOLLOW_ruleVariableInitializer_in_entryRuleVariableInitializer4045);
            iv_ruleVariableInitializer=ruleVariableInitializer();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleVariableInitializer; 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRuleVariableInitializer4055); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleVariableInitializer"


    // $ANTLR start "ruleVariableInitializer"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1783:1: ruleVariableInitializer returns [EObject current=null] : (this_Expression_0= ruleExpression | (otherlv_1= '{' this_ExpressionList_2= ruleExpressionList otherlv_3= '}' ) ) ;
    public final EObject ruleVariableInitializer() throws RecognitionException {
        EObject current = null;

        Token otherlv_1=null;
        Token otherlv_3=null;
        EObject this_Expression_0 = null;

        EObject this_ExpressionList_2 = null;


         enterRule(); 
            
        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1786:28: ( (this_Expression_0= ruleExpression | (otherlv_1= '{' this_ExpressionList_2= ruleExpressionList otherlv_3= '}' ) ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1787:1: (this_Expression_0= ruleExpression | (otherlv_1= '{' this_ExpressionList_2= ruleExpressionList otherlv_3= '}' ) )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1787:1: (this_Expression_0= ruleExpression | (otherlv_1= '{' this_ExpressionList_2= ruleExpressionList otherlv_3= '}' ) )
            int alt37=2;
            int LA37_0 = input.LA(1);

            if ( (LA37_0==RULE_ID||(LA37_0>=RULE_FLOATING_POINT_LITERAL && LA37_0<=RULE_DECIMAL_LITERAL)||LA37_0==52||LA37_0==57||(LA37_0>=89 && LA37_0<=90)||(LA37_0>=94 && LA37_0<=97)||(LA37_0>=102 && LA37_0<=106)||(LA37_0>=109 && LA37_0<=137)||LA37_0==145) ) {
                alt37=1;
            }
            else if ( (LA37_0==47) ) {
                alt37=2;
            }
            else {
                if (state.backtracking>0) {state.failed=true; return current;}
                NoViableAltException nvae =
                    new NoViableAltException("", 37, 0, input);

                throw nvae;
            }
            switch (alt37) {
                case 1 :
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1788:5: this_Expression_0= ruleExpression
                    {
                    if ( state.backtracking==0 ) {
                       
                              newCompositeNode(grammarAccess.getVariableInitializerAccess().getExpressionParserRuleCall_0()); 
                          
                    }
                    pushFollow(FOLLOW_ruleExpression_in_ruleVariableInitializer4102);
                    this_Expression_0=ruleExpression();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {
                       
                              current = this_Expression_0; 
                              afterParserOrEnumRuleCall();
                          
                    }

                    }
                    break;
                case 2 :
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1797:6: (otherlv_1= '{' this_ExpressionList_2= ruleExpressionList otherlv_3= '}' )
                    {
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1797:6: (otherlv_1= '{' this_ExpressionList_2= ruleExpressionList otherlv_3= '}' )
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1797:8: otherlv_1= '{' this_ExpressionList_2= ruleExpressionList otherlv_3= '}'
                    {
                    otherlv_1=(Token)match(input,47,FOLLOW_47_in_ruleVariableInitializer4120); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                          	newLeafNode(otherlv_1, grammarAccess.getVariableInitializerAccess().getLeftCurlyBracketKeyword_1_0());
                          
                    }
                    if ( state.backtracking==0 ) {
                       
                              newCompositeNode(grammarAccess.getVariableInitializerAccess().getExpressionListParserRuleCall_1_1()); 
                          
                    }
                    pushFollow(FOLLOW_ruleExpressionList_in_ruleVariableInitializer4142);
                    this_ExpressionList_2=ruleExpressionList();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {
                       
                              current = this_ExpressionList_2; 
                              afterParserOrEnumRuleCall();
                          
                    }
                    otherlv_3=(Token)match(input,48,FOLLOW_48_in_ruleVariableInitializer4153); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                          	newLeafNode(otherlv_3, grammarAccess.getVariableInitializerAccess().getRightCurlyBracketKeyword_1_2());
                          
                    }

                    }


                    }
                    break;

            }


            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleVariableInitializer"


    // $ANTLR start "entryRuleReturnStatement"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1822:1: entryRuleReturnStatement returns [EObject current=null] : iv_ruleReturnStatement= ruleReturnStatement EOF ;
    public final EObject entryRuleReturnStatement() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleReturnStatement = null;


        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1823:2: (iv_ruleReturnStatement= ruleReturnStatement EOF )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1824:2: iv_ruleReturnStatement= ruleReturnStatement EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getReturnStatementRule()); 
            }
            pushFollow(FOLLOW_ruleReturnStatement_in_entryRuleReturnStatement4190);
            iv_ruleReturnStatement=ruleReturnStatement();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleReturnStatement; 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRuleReturnStatement4200); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleReturnStatement"


    // $ANTLR start "ruleReturnStatement"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1831:1: ruleReturnStatement returns [EObject current=null] : (otherlv_0= 'return' ( (lv_expression_1_0= ruleExpression ) ) otherlv_2= ';' ) ;
    public final EObject ruleReturnStatement() throws RecognitionException {
        EObject current = null;

        Token otherlv_0=null;
        Token otherlv_2=null;
        EObject lv_expression_1_0 = null;


         enterRule(); 
            
        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1834:28: ( (otherlv_0= 'return' ( (lv_expression_1_0= ruleExpression ) ) otherlv_2= ';' ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1835:1: (otherlv_0= 'return' ( (lv_expression_1_0= ruleExpression ) ) otherlv_2= ';' )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1835:1: (otherlv_0= 'return' ( (lv_expression_1_0= ruleExpression ) ) otherlv_2= ';' )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1835:3: otherlv_0= 'return' ( (lv_expression_1_0= ruleExpression ) ) otherlv_2= ';'
            {
            otherlv_0=(Token)match(input,55,FOLLOW_55_in_ruleReturnStatement4237); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_0, grammarAccess.getReturnStatementAccess().getReturnKeyword_0());
                  
            }
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1839:1: ( (lv_expression_1_0= ruleExpression ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1840:1: (lv_expression_1_0= ruleExpression )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1840:1: (lv_expression_1_0= ruleExpression )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1841:3: lv_expression_1_0= ruleExpression
            {
            if ( state.backtracking==0 ) {
               
              	        newCompositeNode(grammarAccess.getReturnStatementAccess().getExpressionExpressionParserRuleCall_1_0()); 
              	    
            }
            pushFollow(FOLLOW_ruleExpression_in_ruleReturnStatement4258);
            lv_expression_1_0=ruleExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              	        if (current==null) {
              	            current = createModelElementForParent(grammarAccess.getReturnStatementRule());
              	        }
                     		set(
                     			current, 
                     			"expression",
                      		lv_expression_1_0, 
                      		"Expression");
              	        afterParserOrEnumRuleCall();
              	    
            }

            }


            }

            otherlv_2=(Token)match(input,29,FOLLOW_29_in_ruleReturnStatement4270); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_2, grammarAccess.getReturnStatementAccess().getSemicolonKeyword_2());
                  
            }

            }


            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleReturnStatement"


    // $ANTLR start "entryRuleAMOUNT"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1869:1: entryRuleAMOUNT returns [String current=null] : iv_ruleAMOUNT= ruleAMOUNT EOF ;
    public final String entryRuleAMOUNT() throws RecognitionException {
        String current = null;

        AntlrDatatypeRuleToken iv_ruleAMOUNT = null;


        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1870:2: (iv_ruleAMOUNT= ruleAMOUNT EOF )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1871:2: iv_ruleAMOUNT= ruleAMOUNT EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getAMOUNTRule()); 
            }
            pushFollow(FOLLOW_ruleAMOUNT_in_entryRuleAMOUNT4307);
            iv_ruleAMOUNT=ruleAMOUNT();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleAMOUNT.getText(); 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRuleAMOUNT4318); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleAMOUNT"


    // $ANTLR start "ruleAMOUNT"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1878:1: ruleAMOUNT returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : (this_AMOUNT_GEONE_0= RULE_AMOUNT_GEONE | this_AMOUNT_ONE_OR_ZERO_1= RULE_AMOUNT_ONE_OR_ZERO ) ;
    public final AntlrDatatypeRuleToken ruleAMOUNT() throws RecognitionException {
        AntlrDatatypeRuleToken current = new AntlrDatatypeRuleToken();

        Token this_AMOUNT_GEONE_0=null;
        Token this_AMOUNT_ONE_OR_ZERO_1=null;

         enterRule(); 
            
        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1881:28: ( (this_AMOUNT_GEONE_0= RULE_AMOUNT_GEONE | this_AMOUNT_ONE_OR_ZERO_1= RULE_AMOUNT_ONE_OR_ZERO ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1882:1: (this_AMOUNT_GEONE_0= RULE_AMOUNT_GEONE | this_AMOUNT_ONE_OR_ZERO_1= RULE_AMOUNT_ONE_OR_ZERO )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1882:1: (this_AMOUNT_GEONE_0= RULE_AMOUNT_GEONE | this_AMOUNT_ONE_OR_ZERO_1= RULE_AMOUNT_ONE_OR_ZERO )
            int alt38=2;
            int LA38_0 = input.LA(1);

            if ( (LA38_0==RULE_AMOUNT_GEONE) ) {
                alt38=1;
            }
            else if ( (LA38_0==RULE_AMOUNT_ONE_OR_ZERO) ) {
                alt38=2;
            }
            else {
                if (state.backtracking>0) {state.failed=true; return current;}
                NoViableAltException nvae =
                    new NoViableAltException("", 38, 0, input);

                throw nvae;
            }
            switch (alt38) {
                case 1 :
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1882:6: this_AMOUNT_GEONE_0= RULE_AMOUNT_GEONE
                    {
                    this_AMOUNT_GEONE_0=(Token)match(input,RULE_AMOUNT_GEONE,FOLLOW_RULE_AMOUNT_GEONE_in_ruleAMOUNT4358); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      		current.merge(this_AMOUNT_GEONE_0);
                          
                    }
                    if ( state.backtracking==0 ) {
                       
                          newLeafNode(this_AMOUNT_GEONE_0, grammarAccess.getAMOUNTAccess().getAMOUNT_GEONETerminalRuleCall_0()); 
                          
                    }

                    }
                    break;
                case 2 :
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1890:10: this_AMOUNT_ONE_OR_ZERO_1= RULE_AMOUNT_ONE_OR_ZERO
                    {
                    this_AMOUNT_ONE_OR_ZERO_1=(Token)match(input,RULE_AMOUNT_ONE_OR_ZERO,FOLLOW_RULE_AMOUNT_ONE_OR_ZERO_in_ruleAMOUNT4384); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      		current.merge(this_AMOUNT_ONE_OR_ZERO_1);
                          
                    }
                    if ( state.backtracking==0 ) {
                       
                          newLeafNode(this_AMOUNT_ONE_OR_ZERO_1, grammarAccess.getAMOUNTAccess().getAMOUNT_ONE_OR_ZEROTerminalRuleCall_1()); 
                          
                    }

                    }
                    break;

            }


            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleAMOUNT"


    // $ANTLR start "entryRuleAbstractInterfaceElement"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1905:1: entryRuleAbstractInterfaceElement returns [EObject current=null] : iv_ruleAbstractInterfaceElement= ruleAbstractInterfaceElement EOF ;
    public final EObject entryRuleAbstractInterfaceElement() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleAbstractInterfaceElement = null;


        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1906:2: (iv_ruleAbstractInterfaceElement= ruleAbstractInterfaceElement EOF )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1907:2: iv_ruleAbstractInterfaceElement= ruleAbstractInterfaceElement EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getAbstractInterfaceElementRule()); 
            }
            pushFollow(FOLLOW_ruleAbstractInterfaceElement_in_entryRuleAbstractInterfaceElement4429);
            iv_ruleAbstractInterfaceElement=ruleAbstractInterfaceElement();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleAbstractInterfaceElement; 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRuleAbstractInterfaceElement4439); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleAbstractInterfaceElement"


    // $ANTLR start "ruleAbstractInterfaceElement"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1914:1: ruleAbstractInterfaceElement returns [EObject current=null] : (this_AbstractMethod_0= ruleAbstractMethod | this_Requires_1= ruleRequires | this_ClockConstraint_2= ruleClockConstraint | this_AbstractInvariant_3= ruleAbstractInvariant ) ;
    public final EObject ruleAbstractInterfaceElement() throws RecognitionException {
        EObject current = null;

        EObject this_AbstractMethod_0 = null;

        EObject this_Requires_1 = null;

        EObject this_ClockConstraint_2 = null;

        EObject this_AbstractInvariant_3 = null;


         enterRule(); 
            
        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1917:28: ( (this_AbstractMethod_0= ruleAbstractMethod | this_Requires_1= ruleRequires | this_ClockConstraint_2= ruleClockConstraint | this_AbstractInvariant_3= ruleAbstractInvariant ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1918:1: (this_AbstractMethod_0= ruleAbstractMethod | this_Requires_1= ruleRequires | this_ClockConstraint_2= ruleClockConstraint | this_AbstractInvariant_3= ruleAbstractInvariant )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1918:1: (this_AbstractMethod_0= ruleAbstractMethod | this_Requires_1= ruleRequires | this_ClockConstraint_2= ruleClockConstraint | this_AbstractInvariant_3= ruleAbstractInvariant )
            int alt39=4;
            switch ( input.LA(1) ) {
            case RULE_ID:
            case 33:
            case 34:
            case 36:
            case 37:
            case 38:
            case 39:
            case 40:
            case 41:
            case 42:
            case 43:
            case 44:
                {
                alt39=1;
                }
                break;
            case 56:
                {
                alt39=2;
                }
                break;
            case 65:
                {
                alt39=3;
                }
                break;
            case 66:
                {
                alt39=4;
                }
                break;
            default:
                if (state.backtracking>0) {state.failed=true; return current;}
                NoViableAltException nvae =
                    new NoViableAltException("", 39, 0, input);

                throw nvae;
            }

            switch (alt39) {
                case 1 :
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1919:5: this_AbstractMethod_0= ruleAbstractMethod
                    {
                    if ( state.backtracking==0 ) {
                       
                              newCompositeNode(grammarAccess.getAbstractInterfaceElementAccess().getAbstractMethodParserRuleCall_0()); 
                          
                    }
                    pushFollow(FOLLOW_ruleAbstractMethod_in_ruleAbstractInterfaceElement4486);
                    this_AbstractMethod_0=ruleAbstractMethod();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {
                       
                              current = this_AbstractMethod_0; 
                              afterParserOrEnumRuleCall();
                          
                    }

                    }
                    break;
                case 2 :
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1929:5: this_Requires_1= ruleRequires
                    {
                    if ( state.backtracking==0 ) {
                       
                              newCompositeNode(grammarAccess.getAbstractInterfaceElementAccess().getRequiresParserRuleCall_1()); 
                          
                    }
                    pushFollow(FOLLOW_ruleRequires_in_ruleAbstractInterfaceElement4513);
                    this_Requires_1=ruleRequires();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {
                       
                              current = this_Requires_1; 
                              afterParserOrEnumRuleCall();
                          
                    }

                    }
                    break;
                case 3 :
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1939:5: this_ClockConstraint_2= ruleClockConstraint
                    {
                    if ( state.backtracking==0 ) {
                       
                              newCompositeNode(grammarAccess.getAbstractInterfaceElementAccess().getClockConstraintParserRuleCall_2()); 
                          
                    }
                    pushFollow(FOLLOW_ruleClockConstraint_in_ruleAbstractInterfaceElement4540);
                    this_ClockConstraint_2=ruleClockConstraint();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {
                       
                              current = this_ClockConstraint_2; 
                              afterParserOrEnumRuleCall();
                          
                    }

                    }
                    break;
                case 4 :
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1949:5: this_AbstractInvariant_3= ruleAbstractInvariant
                    {
                    if ( state.backtracking==0 ) {
                       
                              newCompositeNode(grammarAccess.getAbstractInterfaceElementAccess().getAbstractInvariantParserRuleCall_3()); 
                          
                    }
                    pushFollow(FOLLOW_ruleAbstractInvariant_in_ruleAbstractInterfaceElement4567);
                    this_AbstractInvariant_3=ruleAbstractInvariant();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {
                       
                              current = this_AbstractInvariant_3; 
                              afterParserOrEnumRuleCall();
                          
                    }

                    }
                    break;

            }


            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleAbstractInterfaceElement"


    // $ANTLR start "entryRuleRequires"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1965:1: entryRuleRequires returns [EObject current=null] : iv_ruleRequires= ruleRequires EOF ;
    public final EObject entryRuleRequires() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleRequires = null;


        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1966:2: (iv_ruleRequires= ruleRequires EOF )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1967:2: iv_ruleRequires= ruleRequires EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getRequiresRule()); 
            }
            pushFollow(FOLLOW_ruleRequires_in_entryRuleRequires4602);
            iv_ruleRequires=ruleRequires();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleRequires; 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRuleRequires4612); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleRequires"


    // $ANTLR start "ruleRequires"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1974:1: ruleRequires returns [EObject current=null] : (otherlv_0= 'Requires' ( (lv_name_1_0= RULE_ID ) ) otherlv_2= '[' ruleAMOUNT otherlv_4= ']' otherlv_5= ':' ( (lv_type_6_0= ruleUseType ) ) otherlv_7= ';' ) ;
    public final EObject ruleRequires() throws RecognitionException {
        EObject current = null;

        Token otherlv_0=null;
        Token lv_name_1_0=null;
        Token otherlv_2=null;
        Token otherlv_4=null;
        Token otherlv_5=null;
        Token otherlv_7=null;
        EObject lv_type_6_0 = null;


         enterRule(); 
            
        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1977:28: ( (otherlv_0= 'Requires' ( (lv_name_1_0= RULE_ID ) ) otherlv_2= '[' ruleAMOUNT otherlv_4= ']' otherlv_5= ':' ( (lv_type_6_0= ruleUseType ) ) otherlv_7= ';' ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1978:1: (otherlv_0= 'Requires' ( (lv_name_1_0= RULE_ID ) ) otherlv_2= '[' ruleAMOUNT otherlv_4= ']' otherlv_5= ':' ( (lv_type_6_0= ruleUseType ) ) otherlv_7= ';' )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1978:1: (otherlv_0= 'Requires' ( (lv_name_1_0= RULE_ID ) ) otherlv_2= '[' ruleAMOUNT otherlv_4= ']' otherlv_5= ':' ( (lv_type_6_0= ruleUseType ) ) otherlv_7= ';' )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1978:3: otherlv_0= 'Requires' ( (lv_name_1_0= RULE_ID ) ) otherlv_2= '[' ruleAMOUNT otherlv_4= ']' otherlv_5= ':' ( (lv_type_6_0= ruleUseType ) ) otherlv_7= ';'
            {
            otherlv_0=(Token)match(input,56,FOLLOW_56_in_ruleRequires4649); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_0, grammarAccess.getRequiresAccess().getRequiresKeyword_0());
                  
            }
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1982:1: ( (lv_name_1_0= RULE_ID ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1983:1: (lv_name_1_0= RULE_ID )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1983:1: (lv_name_1_0= RULE_ID )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:1984:3: lv_name_1_0= RULE_ID
            {
            lv_name_1_0=(Token)match(input,RULE_ID,FOLLOW_RULE_ID_in_ruleRequires4666); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(lv_name_1_0, grammarAccess.getRequiresAccess().getNameIDTerminalRuleCall_1_0()); 
              		
            }
            if ( state.backtracking==0 ) {

              	        if (current==null) {
              	            current = createModelElement(grammarAccess.getRequiresRule());
              	        }
                     		setWithLastConsumed(
                     			current, 
                     			"name",
                      		lv_name_1_0, 
                      		"ID");
              	    
            }

            }


            }

            otherlv_2=(Token)match(input,57,FOLLOW_57_in_ruleRequires4683); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_2, grammarAccess.getRequiresAccess().getLeftSquareBracketKeyword_2());
                  
            }
            if ( state.backtracking==0 ) {
               
                      newCompositeNode(grammarAccess.getRequiresAccess().getAMOUNTParserRuleCall_3()); 
                  
            }
            pushFollow(FOLLOW_ruleAMOUNT_in_ruleRequires4699);
            ruleAMOUNT();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               
                      afterParserOrEnumRuleCall();
                  
            }
            otherlv_4=(Token)match(input,58,FOLLOW_58_in_ruleRequires4710); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_4, grammarAccess.getRequiresAccess().getRightSquareBracketKeyword_4());
                  
            }
            otherlv_5=(Token)match(input,59,FOLLOW_59_in_ruleRequires4722); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_5, grammarAccess.getRequiresAccess().getColonKeyword_5());
                  
            }
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:2020:1: ( (lv_type_6_0= ruleUseType ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:2021:1: (lv_type_6_0= ruleUseType )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:2021:1: (lv_type_6_0= ruleUseType )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:2022:3: lv_type_6_0= ruleUseType
            {
            if ( state.backtracking==0 ) {
               
              	        newCompositeNode(grammarAccess.getRequiresAccess().getTypeUseTypeParserRuleCall_6_0()); 
              	    
            }
            pushFollow(FOLLOW_ruleUseType_in_ruleRequires4743);
            lv_type_6_0=ruleUseType();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              	        if (current==null) {
              	            current = createModelElementForParent(grammarAccess.getRequiresRule());
              	        }
                     		set(
                     			current, 
                     			"type",
                      		lv_type_6_0, 
                      		"UseType");
              	        afterParserOrEnumRuleCall();
              	    
            }

            }


            }

            otherlv_7=(Token)match(input,29,FOLLOW_29_in_ruleRequires4755); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_7, grammarAccess.getRequiresAccess().getSemicolonKeyword_7());
                  
            }

            }


            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleRequires"


    // $ANTLR start "entryRuleAbstractDynamicSwitch"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:2050:1: entryRuleAbstractDynamicSwitch returns [EObject current=null] : iv_ruleAbstractDynamicSwitch= ruleAbstractDynamicSwitch EOF ;
    public final EObject entryRuleAbstractDynamicSwitch() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleAbstractDynamicSwitch = null;


        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:2051:2: (iv_ruleAbstractDynamicSwitch= ruleAbstractDynamicSwitch EOF )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:2052:2: iv_ruleAbstractDynamicSwitch= ruleAbstractDynamicSwitch EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getAbstractDynamicSwitchRule()); 
            }
            pushFollow(FOLLOW_ruleAbstractDynamicSwitch_in_entryRuleAbstractDynamicSwitch4791);
            iv_ruleAbstractDynamicSwitch=ruleAbstractDynamicSwitch();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleAbstractDynamicSwitch; 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRuleAbstractDynamicSwitch4801); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleAbstractDynamicSwitch"


    // $ANTLR start "ruleAbstractDynamicSwitch"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:2059:1: ruleAbstractDynamicSwitch returns [EObject current=null] : (otherlv_0= '(' ( (lv_sname_1_0= RULE_ID ) ) otherlv_2= '[' ruleAMOUNT otherlv_4= ']' otherlv_5= ':' ( (otherlv_6= RULE_ID ) ) (otherlv_7= '|' ( (otherlv_8= RULE_ID ) ) )? otherlv_9= ',' ( (lv_aname_10_0= RULE_ID ) ) otherlv_11= '[' ruleAMOUNT otherlv_13= ']' otherlv_14= ':' ( (otherlv_15= RULE_ID ) ) otherlv_16= ',' ( (lv_dname_17_0= RULE_ID ) ) otherlv_18= '[' ruleAMOUNT otherlv_20= ']' otherlv_21= ':' ( (otherlv_22= RULE_ID ) ) (otherlv_23= '|' ( (otherlv_24= RULE_ID ) ) )? otherlv_25= ')' ) ;
    public final EObject ruleAbstractDynamicSwitch() throws RecognitionException {
        EObject current = null;

        Token otherlv_0=null;
        Token lv_sname_1_0=null;
        Token otherlv_2=null;
        Token otherlv_4=null;
        Token otherlv_5=null;
        Token otherlv_6=null;
        Token otherlv_7=null;
        Token otherlv_8=null;
        Token otherlv_9=null;
        Token lv_aname_10_0=null;
        Token otherlv_11=null;
        Token otherlv_13=null;
        Token otherlv_14=null;
        Token otherlv_15=null;
        Token otherlv_16=null;
        Token lv_dname_17_0=null;
        Token otherlv_18=null;
        Token otherlv_20=null;
        Token otherlv_21=null;
        Token otherlv_22=null;
        Token otherlv_23=null;
        Token otherlv_24=null;
        Token otherlv_25=null;

         enterRule(); 
            
        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:2062:28: ( (otherlv_0= '(' ( (lv_sname_1_0= RULE_ID ) ) otherlv_2= '[' ruleAMOUNT otherlv_4= ']' otherlv_5= ':' ( (otherlv_6= RULE_ID ) ) (otherlv_7= '|' ( (otherlv_8= RULE_ID ) ) )? otherlv_9= ',' ( (lv_aname_10_0= RULE_ID ) ) otherlv_11= '[' ruleAMOUNT otherlv_13= ']' otherlv_14= ':' ( (otherlv_15= RULE_ID ) ) otherlv_16= ',' ( (lv_dname_17_0= RULE_ID ) ) otherlv_18= '[' ruleAMOUNT otherlv_20= ']' otherlv_21= ':' ( (otherlv_22= RULE_ID ) ) (otherlv_23= '|' ( (otherlv_24= RULE_ID ) ) )? otherlv_25= ')' ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:2063:1: (otherlv_0= '(' ( (lv_sname_1_0= RULE_ID ) ) otherlv_2= '[' ruleAMOUNT otherlv_4= ']' otherlv_5= ':' ( (otherlv_6= RULE_ID ) ) (otherlv_7= '|' ( (otherlv_8= RULE_ID ) ) )? otherlv_9= ',' ( (lv_aname_10_0= RULE_ID ) ) otherlv_11= '[' ruleAMOUNT otherlv_13= ']' otherlv_14= ':' ( (otherlv_15= RULE_ID ) ) otherlv_16= ',' ( (lv_dname_17_0= RULE_ID ) ) otherlv_18= '[' ruleAMOUNT otherlv_20= ']' otherlv_21= ':' ( (otherlv_22= RULE_ID ) ) (otherlv_23= '|' ( (otherlv_24= RULE_ID ) ) )? otherlv_25= ')' )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:2063:1: (otherlv_0= '(' ( (lv_sname_1_0= RULE_ID ) ) otherlv_2= '[' ruleAMOUNT otherlv_4= ']' otherlv_5= ':' ( (otherlv_6= RULE_ID ) ) (otherlv_7= '|' ( (otherlv_8= RULE_ID ) ) )? otherlv_9= ',' ( (lv_aname_10_0= RULE_ID ) ) otherlv_11= '[' ruleAMOUNT otherlv_13= ']' otherlv_14= ':' ( (otherlv_15= RULE_ID ) ) otherlv_16= ',' ( (lv_dname_17_0= RULE_ID ) ) otherlv_18= '[' ruleAMOUNT otherlv_20= ']' otherlv_21= ':' ( (otherlv_22= RULE_ID ) ) (otherlv_23= '|' ( (otherlv_24= RULE_ID ) ) )? otherlv_25= ')' )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:2063:3: otherlv_0= '(' ( (lv_sname_1_0= RULE_ID ) ) otherlv_2= '[' ruleAMOUNT otherlv_4= ']' otherlv_5= ':' ( (otherlv_6= RULE_ID ) ) (otherlv_7= '|' ( (otherlv_8= RULE_ID ) ) )? otherlv_9= ',' ( (lv_aname_10_0= RULE_ID ) ) otherlv_11= '[' ruleAMOUNT otherlv_13= ']' otherlv_14= ':' ( (otherlv_15= RULE_ID ) ) otherlv_16= ',' ( (lv_dname_17_0= RULE_ID ) ) otherlv_18= '[' ruleAMOUNT otherlv_20= ']' otherlv_21= ':' ( (otherlv_22= RULE_ID ) ) (otherlv_23= '|' ( (otherlv_24= RULE_ID ) ) )? otherlv_25= ')'
            {
            otherlv_0=(Token)match(input,52,FOLLOW_52_in_ruleAbstractDynamicSwitch4838); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_0, grammarAccess.getAbstractDynamicSwitchAccess().getLeftParenthesisKeyword_0());
                  
            }
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:2067:1: ( (lv_sname_1_0= RULE_ID ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:2068:1: (lv_sname_1_0= RULE_ID )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:2068:1: (lv_sname_1_0= RULE_ID )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:2069:3: lv_sname_1_0= RULE_ID
            {
            lv_sname_1_0=(Token)match(input,RULE_ID,FOLLOW_RULE_ID_in_ruleAbstractDynamicSwitch4855); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(lv_sname_1_0, grammarAccess.getAbstractDynamicSwitchAccess().getSnameIDTerminalRuleCall_1_0()); 
              		
            }
            if ( state.backtracking==0 ) {

              	        if (current==null) {
              	            current = createModelElement(grammarAccess.getAbstractDynamicSwitchRule());
              	        }
                     		setWithLastConsumed(
                     			current, 
                     			"sname",
                      		lv_sname_1_0, 
                      		"ID");
              	    
            }

            }


            }

            otherlv_2=(Token)match(input,57,FOLLOW_57_in_ruleAbstractDynamicSwitch4872); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_2, grammarAccess.getAbstractDynamicSwitchAccess().getLeftSquareBracketKeyword_2());
                  
            }
            if ( state.backtracking==0 ) {
               
                      newCompositeNode(grammarAccess.getAbstractDynamicSwitchAccess().getAMOUNTParserRuleCall_3()); 
                  
            }
            pushFollow(FOLLOW_ruleAMOUNT_in_ruleAbstractDynamicSwitch4888);
            ruleAMOUNT();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               
                      afterParserOrEnumRuleCall();
                  
            }
            otherlv_4=(Token)match(input,58,FOLLOW_58_in_ruleAbstractDynamicSwitch4899); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_4, grammarAccess.getAbstractDynamicSwitchAccess().getRightSquareBracketKeyword_4());
                  
            }
            otherlv_5=(Token)match(input,59,FOLLOW_59_in_ruleAbstractDynamicSwitch4911); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_5, grammarAccess.getAbstractDynamicSwitchAccess().getColonKeyword_5());
                  
            }
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:2105:1: ( (otherlv_6= RULE_ID ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:2106:1: (otherlv_6= RULE_ID )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:2106:1: (otherlv_6= RULE_ID )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:2107:3: otherlv_6= RULE_ID
            {
            if ( state.backtracking==0 ) {

              			if (current==null) {
              	            current = createModelElement(grammarAccess.getAbstractDynamicSwitchRule());
              	        }
                      
            }
            otherlv_6=(Token)match(input,RULE_ID,FOLLOW_RULE_ID_in_ruleAbstractDynamicSwitch4931); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              		newLeafNode(otherlv_6, grammarAccess.getAbstractDynamicSwitchAccess().getType1RefTypeCrossReference_6_0()); 
              	
            }

            }


            }

            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:2118:2: (otherlv_7= '|' ( (otherlv_8= RULE_ID ) ) )?
            int alt40=2;
            int LA40_0 = input.LA(1);

            if ( (LA40_0==60) ) {
                alt40=1;
            }
            switch (alt40) {
                case 1 :
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:2118:4: otherlv_7= '|' ( (otherlv_8= RULE_ID ) )
                    {
                    otherlv_7=(Token)match(input,60,FOLLOW_60_in_ruleAbstractDynamicSwitch4944); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                          	newLeafNode(otherlv_7, grammarAccess.getAbstractDynamicSwitchAccess().getVerticalLineKeyword_7_0());
                          
                    }
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:2122:1: ( (otherlv_8= RULE_ID ) )
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:2123:1: (otherlv_8= RULE_ID )
                    {
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:2123:1: (otherlv_8= RULE_ID )
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:2124:3: otherlv_8= RULE_ID
                    {
                    if ( state.backtracking==0 ) {

                      			if (current==null) {
                      	            current = createModelElement(grammarAccess.getAbstractDynamicSwitchRule());
                      	        }
                              
                    }
                    otherlv_8=(Token)match(input,RULE_ID,FOLLOW_RULE_ID_in_ruleAbstractDynamicSwitch4964); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      		newLeafNode(otherlv_8, grammarAccess.getAbstractDynamicSwitchAccess().getType2RefTypeCrossReference_7_1_0()); 
                      	
                    }

                    }


                    }


                    }
                    break;

            }

            otherlv_9=(Token)match(input,53,FOLLOW_53_in_ruleAbstractDynamicSwitch4978); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_9, grammarAccess.getAbstractDynamicSwitchAccess().getCommaKeyword_8());
                  
            }
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:2139:1: ( (lv_aname_10_0= RULE_ID ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:2140:1: (lv_aname_10_0= RULE_ID )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:2140:1: (lv_aname_10_0= RULE_ID )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:2141:3: lv_aname_10_0= RULE_ID
            {
            lv_aname_10_0=(Token)match(input,RULE_ID,FOLLOW_RULE_ID_in_ruleAbstractDynamicSwitch4995); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(lv_aname_10_0, grammarAccess.getAbstractDynamicSwitchAccess().getAnameIDTerminalRuleCall_9_0()); 
              		
            }
            if ( state.backtracking==0 ) {

              	        if (current==null) {
              	            current = createModelElement(grammarAccess.getAbstractDynamicSwitchRule());
              	        }
                     		setWithLastConsumed(
                     			current, 
                     			"aname",
                      		lv_aname_10_0, 
                      		"ID");
              	    
            }

            }


            }

            otherlv_11=(Token)match(input,57,FOLLOW_57_in_ruleAbstractDynamicSwitch5012); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_11, grammarAccess.getAbstractDynamicSwitchAccess().getLeftSquareBracketKeyword_10());
                  
            }
            if ( state.backtracking==0 ) {
               
                      newCompositeNode(grammarAccess.getAbstractDynamicSwitchAccess().getAMOUNTParserRuleCall_11()); 
                  
            }
            pushFollow(FOLLOW_ruleAMOUNT_in_ruleAbstractDynamicSwitch5028);
            ruleAMOUNT();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               
                      afterParserOrEnumRuleCall();
                  
            }
            otherlv_13=(Token)match(input,58,FOLLOW_58_in_ruleAbstractDynamicSwitch5039); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_13, grammarAccess.getAbstractDynamicSwitchAccess().getRightSquareBracketKeyword_12());
                  
            }
            otherlv_14=(Token)match(input,59,FOLLOW_59_in_ruleAbstractDynamicSwitch5051); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_14, grammarAccess.getAbstractDynamicSwitchAccess().getColonKeyword_13());
                  
            }
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:2177:1: ( (otherlv_15= RULE_ID ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:2178:1: (otherlv_15= RULE_ID )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:2178:1: (otherlv_15= RULE_ID )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:2179:3: otherlv_15= RULE_ID
            {
            if ( state.backtracking==0 ) {

              			if (current==null) {
              	            current = createModelElement(grammarAccess.getAbstractDynamicSwitchRule());
              	        }
                      
            }
            otherlv_15=(Token)match(input,RULE_ID,FOLLOW_RULE_ID_in_ruleAbstractDynamicSwitch5071); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              		newLeafNode(otherlv_15, grammarAccess.getAbstractDynamicSwitchAccess().getType3RefTypeCrossReference_14_0()); 
              	
            }

            }


            }

            otherlv_16=(Token)match(input,53,FOLLOW_53_in_ruleAbstractDynamicSwitch5083); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_16, grammarAccess.getAbstractDynamicSwitchAccess().getCommaKeyword_15());
                  
            }
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:2194:1: ( (lv_dname_17_0= RULE_ID ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:2195:1: (lv_dname_17_0= RULE_ID )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:2195:1: (lv_dname_17_0= RULE_ID )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:2196:3: lv_dname_17_0= RULE_ID
            {
            lv_dname_17_0=(Token)match(input,RULE_ID,FOLLOW_RULE_ID_in_ruleAbstractDynamicSwitch5100); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(lv_dname_17_0, grammarAccess.getAbstractDynamicSwitchAccess().getDnameIDTerminalRuleCall_16_0()); 
              		
            }
            if ( state.backtracking==0 ) {

              	        if (current==null) {
              	            current = createModelElement(grammarAccess.getAbstractDynamicSwitchRule());
              	        }
                     		setWithLastConsumed(
                     			current, 
                     			"dname",
                      		lv_dname_17_0, 
                      		"ID");
              	    
            }

            }


            }

            otherlv_18=(Token)match(input,57,FOLLOW_57_in_ruleAbstractDynamicSwitch5117); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_18, grammarAccess.getAbstractDynamicSwitchAccess().getLeftSquareBracketKeyword_17());
                  
            }
            if ( state.backtracking==0 ) {
               
                      newCompositeNode(grammarAccess.getAbstractDynamicSwitchAccess().getAMOUNTParserRuleCall_18()); 
                  
            }
            pushFollow(FOLLOW_ruleAMOUNT_in_ruleAbstractDynamicSwitch5133);
            ruleAMOUNT();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               
                      afterParserOrEnumRuleCall();
                  
            }
            otherlv_20=(Token)match(input,58,FOLLOW_58_in_ruleAbstractDynamicSwitch5144); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_20, grammarAccess.getAbstractDynamicSwitchAccess().getRightSquareBracketKeyword_19());
                  
            }
            otherlv_21=(Token)match(input,59,FOLLOW_59_in_ruleAbstractDynamicSwitch5156); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_21, grammarAccess.getAbstractDynamicSwitchAccess().getColonKeyword_20());
                  
            }
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:2232:1: ( (otherlv_22= RULE_ID ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:2233:1: (otherlv_22= RULE_ID )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:2233:1: (otherlv_22= RULE_ID )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:2234:3: otherlv_22= RULE_ID
            {
            if ( state.backtracking==0 ) {

              			if (current==null) {
              	            current = createModelElement(grammarAccess.getAbstractDynamicSwitchRule());
              	        }
                      
            }
            otherlv_22=(Token)match(input,RULE_ID,FOLLOW_RULE_ID_in_ruleAbstractDynamicSwitch5176); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              		newLeafNode(otherlv_22, grammarAccess.getAbstractDynamicSwitchAccess().getType4RefTypeCrossReference_21_0()); 
              	
            }

            }


            }

            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:2245:2: (otherlv_23= '|' ( (otherlv_24= RULE_ID ) ) )?
            int alt41=2;
            int LA41_0 = input.LA(1);

            if ( (LA41_0==60) ) {
                alt41=1;
            }
            switch (alt41) {
                case 1 :
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:2245:4: otherlv_23= '|' ( (otherlv_24= RULE_ID ) )
                    {
                    otherlv_23=(Token)match(input,60,FOLLOW_60_in_ruleAbstractDynamicSwitch5189); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                          	newLeafNode(otherlv_23, grammarAccess.getAbstractDynamicSwitchAccess().getVerticalLineKeyword_22_0());
                          
                    }
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:2249:1: ( (otherlv_24= RULE_ID ) )
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:2250:1: (otherlv_24= RULE_ID )
                    {
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:2250:1: (otherlv_24= RULE_ID )
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:2251:3: otherlv_24= RULE_ID
                    {
                    if ( state.backtracking==0 ) {

                      			if (current==null) {
                      	            current = createModelElement(grammarAccess.getAbstractDynamicSwitchRule());
                      	        }
                              
                    }
                    otherlv_24=(Token)match(input,RULE_ID,FOLLOW_RULE_ID_in_ruleAbstractDynamicSwitch5209); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      		newLeafNode(otherlv_24, grammarAccess.getAbstractDynamicSwitchAccess().getType5RefTypeCrossReference_22_1_0()); 
                      	
                    }

                    }


                    }


                    }
                    break;

            }

            otherlv_25=(Token)match(input,54,FOLLOW_54_in_ruleAbstractDynamicSwitch5223); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_25, grammarAccess.getAbstractDynamicSwitchAccess().getRightParenthesisKeyword_23());
                  
            }

            }


            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleAbstractDynamicSwitch"


    // $ANTLR start "entryRuleABSTRACT_CONDTION"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:2274:1: entryRuleABSTRACT_CONDTION returns [String current=null] : iv_ruleABSTRACT_CONDTION= ruleABSTRACT_CONDTION EOF ;
    public final String entryRuleABSTRACT_CONDTION() throws RecognitionException {
        String current = null;

        AntlrDatatypeRuleToken iv_ruleABSTRACT_CONDTION = null;


        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:2275:2: (iv_ruleABSTRACT_CONDTION= ruleABSTRACT_CONDTION EOF )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:2276:2: iv_ruleABSTRACT_CONDTION= ruleABSTRACT_CONDTION EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getABSTRACT_CONDTIONRule()); 
            }
            pushFollow(FOLLOW_ruleABSTRACT_CONDTION_in_entryRuleABSTRACT_CONDTION5260);
            iv_ruleABSTRACT_CONDTION=ruleABSTRACT_CONDTION();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleABSTRACT_CONDTION.getText(); 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRuleABSTRACT_CONDTION5271); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleABSTRACT_CONDTION"


    // $ANTLR start "ruleABSTRACT_CONDTION"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:2283:1: ruleABSTRACT_CONDTION returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : (kw= 'Condition' kw= '{' kw= '}' kw= ';' ) ;
    public final AntlrDatatypeRuleToken ruleABSTRACT_CONDTION() throws RecognitionException {
        AntlrDatatypeRuleToken current = new AntlrDatatypeRuleToken();

        Token kw=null;

         enterRule(); 
            
        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:2286:28: ( (kw= 'Condition' kw= '{' kw= '}' kw= ';' ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:2287:1: (kw= 'Condition' kw= '{' kw= '}' kw= ';' )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:2287:1: (kw= 'Condition' kw= '{' kw= '}' kw= ';' )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:2288:2: kw= 'Condition' kw= '{' kw= '}' kw= ';'
            {
            kw=(Token)match(input,61,FOLLOW_61_in_ruleABSTRACT_CONDTION5309); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                      current.merge(kw);
                      newLeafNode(kw, grammarAccess.getABSTRACT_CONDTIONAccess().getConditionKeyword_0()); 
                  
            }
            kw=(Token)match(input,47,FOLLOW_47_in_ruleABSTRACT_CONDTION5322); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                      current.merge(kw);
                      newLeafNode(kw, grammarAccess.getABSTRACT_CONDTIONAccess().getLeftCurlyBracketKeyword_1()); 
                  
            }
            kw=(Token)match(input,48,FOLLOW_48_in_ruleABSTRACT_CONDTION5335); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                      current.merge(kw);
                      newLeafNode(kw, grammarAccess.getABSTRACT_CONDTIONAccess().getRightCurlyBracketKeyword_2()); 
                  
            }
            kw=(Token)match(input,29,FOLLOW_29_in_ruleABSTRACT_CONDTION5348); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                      current.merge(kw);
                      newLeafNode(kw, grammarAccess.getABSTRACT_CONDTIONAccess().getSemicolonKeyword_3()); 
                  
            }

            }


            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleABSTRACT_CONDTION"


    // $ANTLR start "entryRuleAbstractCompositionMethod"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:2319:1: entryRuleAbstractCompositionMethod returns [EObject current=null] : iv_ruleAbstractCompositionMethod= ruleAbstractCompositionMethod EOF ;
    public final EObject entryRuleAbstractCompositionMethod() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleAbstractCompositionMethod = null;


        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:2320:2: (iv_ruleAbstractCompositionMethod= ruleAbstractCompositionMethod EOF )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:2321:2: iv_ruleAbstractCompositionMethod= ruleAbstractCompositionMethod EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getAbstractCompositionMethodRule()); 
            }
            pushFollow(FOLLOW_ruleAbstractCompositionMethod_in_entryRuleAbstractCompositionMethod5388);
            iv_ruleAbstractCompositionMethod=ruleAbstractCompositionMethod();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleAbstractCompositionMethod; 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRuleAbstractCompositionMethod5398); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleAbstractCompositionMethod"


    // $ANTLR start "ruleAbstractCompositionMethod"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:2328:1: ruleAbstractCompositionMethod returns [EObject current=null] : (otherlv_0= 'void' ( (lv_name_1_0= 'Composition' ) ) otherlv_2= '(' otherlv_3= ')' otherlv_4= '{' ( (lv_rac_5_0= ruleRequiresAbstractComposition ) ) otherlv_6= '}' otherlv_7= ';' ) ;
    public final EObject ruleAbstractCompositionMethod() throws RecognitionException {
        EObject current = null;

        Token otherlv_0=null;
        Token lv_name_1_0=null;
        Token otherlv_2=null;
        Token otherlv_3=null;
        Token otherlv_4=null;
        Token otherlv_6=null;
        Token otherlv_7=null;
        EObject lv_rac_5_0 = null;


         enterRule(); 
            
        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:2331:28: ( (otherlv_0= 'void' ( (lv_name_1_0= 'Composition' ) ) otherlv_2= '(' otherlv_3= ')' otherlv_4= '{' ( (lv_rac_5_0= ruleRequiresAbstractComposition ) ) otherlv_6= '}' otherlv_7= ';' ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:2332:1: (otherlv_0= 'void' ( (lv_name_1_0= 'Composition' ) ) otherlv_2= '(' otherlv_3= ')' otherlv_4= '{' ( (lv_rac_5_0= ruleRequiresAbstractComposition ) ) otherlv_6= '}' otherlv_7= ';' )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:2332:1: (otherlv_0= 'void' ( (lv_name_1_0= 'Composition' ) ) otherlv_2= '(' otherlv_3= ')' otherlv_4= '{' ( (lv_rac_5_0= ruleRequiresAbstractComposition ) ) otherlv_6= '}' otherlv_7= ';' )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:2332:3: otherlv_0= 'void' ( (lv_name_1_0= 'Composition' ) ) otherlv_2= '(' otherlv_3= ')' otherlv_4= '{' ( (lv_rac_5_0= ruleRequiresAbstractComposition ) ) otherlv_6= '}' otherlv_7= ';'
            {
            otherlv_0=(Token)match(input,37,FOLLOW_37_in_ruleAbstractCompositionMethod5435); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_0, grammarAccess.getAbstractCompositionMethodAccess().getVoidKeyword_0());
                  
            }
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:2336:1: ( (lv_name_1_0= 'Composition' ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:2337:1: (lv_name_1_0= 'Composition' )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:2337:1: (lv_name_1_0= 'Composition' )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:2338:3: lv_name_1_0= 'Composition'
            {
            lv_name_1_0=(Token)match(input,62,FOLLOW_62_in_ruleAbstractCompositionMethod5453); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                      newLeafNode(lv_name_1_0, grammarAccess.getAbstractCompositionMethodAccess().getNameCompositionKeyword_1_0());
                  
            }
            if ( state.backtracking==0 ) {

              	        if (current==null) {
              	            current = createModelElement(grammarAccess.getAbstractCompositionMethodRule());
              	        }
                     		setWithLastConsumed(current, "name", lv_name_1_0, "Composition");
              	    
            }

            }


            }

            otherlv_2=(Token)match(input,52,FOLLOW_52_in_ruleAbstractCompositionMethod5478); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_2, grammarAccess.getAbstractCompositionMethodAccess().getLeftParenthesisKeyword_2());
                  
            }
            otherlv_3=(Token)match(input,54,FOLLOW_54_in_ruleAbstractCompositionMethod5490); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_3, grammarAccess.getAbstractCompositionMethodAccess().getRightParenthesisKeyword_3());
                  
            }
            otherlv_4=(Token)match(input,47,FOLLOW_47_in_ruleAbstractCompositionMethod5502); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_4, grammarAccess.getAbstractCompositionMethodAccess().getLeftCurlyBracketKeyword_4());
                  
            }
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:2363:1: ( (lv_rac_5_0= ruleRequiresAbstractComposition ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:2364:1: (lv_rac_5_0= ruleRequiresAbstractComposition )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:2364:1: (lv_rac_5_0= ruleRequiresAbstractComposition )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:2365:3: lv_rac_5_0= ruleRequiresAbstractComposition
            {
            if ( state.backtracking==0 ) {
               
              	        newCompositeNode(grammarAccess.getAbstractCompositionMethodAccess().getRacRequiresAbstractCompositionParserRuleCall_5_0()); 
              	    
            }
            pushFollow(FOLLOW_ruleRequiresAbstractComposition_in_ruleAbstractCompositionMethod5523);
            lv_rac_5_0=ruleRequiresAbstractComposition();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              	        if (current==null) {
              	            current = createModelElementForParent(grammarAccess.getAbstractCompositionMethodRule());
              	        }
                     		set(
                     			current, 
                     			"rac",
                      		lv_rac_5_0, 
                      		"RequiresAbstractComposition");
              	        afterParserOrEnumRuleCall();
              	    
            }

            }


            }

            otherlv_6=(Token)match(input,48,FOLLOW_48_in_ruleAbstractCompositionMethod5535); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_6, grammarAccess.getAbstractCompositionMethodAccess().getRightCurlyBracketKeyword_6());
                  
            }
            otherlv_7=(Token)match(input,29,FOLLOW_29_in_ruleAbstractCompositionMethod5547); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_7, grammarAccess.getAbstractCompositionMethodAccess().getSemicolonKeyword_7());
                  
            }

            }


            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleAbstractCompositionMethod"


    // $ANTLR start "entryRuleNativeStartMethod"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:2397:1: entryRuleNativeStartMethod returns [EObject current=null] : iv_ruleNativeStartMethod= ruleNativeStartMethod EOF ;
    public final EObject entryRuleNativeStartMethod() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleNativeStartMethod = null;


        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:2398:2: (iv_ruleNativeStartMethod= ruleNativeStartMethod EOF )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:2399:2: iv_ruleNativeStartMethod= ruleNativeStartMethod EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getNativeStartMethodRule()); 
            }
            pushFollow(FOLLOW_ruleNativeStartMethod_in_entryRuleNativeStartMethod5583);
            iv_ruleNativeStartMethod=ruleNativeStartMethod();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleNativeStartMethod; 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRuleNativeStartMethod5593); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleNativeStartMethod"


    // $ANTLR start "ruleNativeStartMethod"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:2406:1: ruleNativeStartMethod returns [EObject current=null] : (otherlv_0= 'Native' otherlv_1= 'void' ( (lv_name_2_0= 'Start' ) ) otherlv_3= '(' otherlv_4= ')' otherlv_5= ';' ) ;
    public final EObject ruleNativeStartMethod() throws RecognitionException {
        EObject current = null;

        Token otherlv_0=null;
        Token otherlv_1=null;
        Token lv_name_2_0=null;
        Token otherlv_3=null;
        Token otherlv_4=null;
        Token otherlv_5=null;

         enterRule(); 
            
        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:2409:28: ( (otherlv_0= 'Native' otherlv_1= 'void' ( (lv_name_2_0= 'Start' ) ) otherlv_3= '(' otherlv_4= ')' otherlv_5= ';' ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:2410:1: (otherlv_0= 'Native' otherlv_1= 'void' ( (lv_name_2_0= 'Start' ) ) otherlv_3= '(' otherlv_4= ')' otherlv_5= ';' )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:2410:1: (otherlv_0= 'Native' otherlv_1= 'void' ( (lv_name_2_0= 'Start' ) ) otherlv_3= '(' otherlv_4= ')' otherlv_5= ';' )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:2410:3: otherlv_0= 'Native' otherlv_1= 'void' ( (lv_name_2_0= 'Start' ) ) otherlv_3= '(' otherlv_4= ')' otherlv_5= ';'
            {
            otherlv_0=(Token)match(input,36,FOLLOW_36_in_ruleNativeStartMethod5630); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_0, grammarAccess.getNativeStartMethodAccess().getNativeKeyword_0());
                  
            }
            otherlv_1=(Token)match(input,37,FOLLOW_37_in_ruleNativeStartMethod5642); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_1, grammarAccess.getNativeStartMethodAccess().getVoidKeyword_1());
                  
            }
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:2418:1: ( (lv_name_2_0= 'Start' ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:2419:1: (lv_name_2_0= 'Start' )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:2419:1: (lv_name_2_0= 'Start' )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:2420:3: lv_name_2_0= 'Start'
            {
            lv_name_2_0=(Token)match(input,63,FOLLOW_63_in_ruleNativeStartMethod5660); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                      newLeafNode(lv_name_2_0, grammarAccess.getNativeStartMethodAccess().getNameStartKeyword_2_0());
                  
            }
            if ( state.backtracking==0 ) {

              	        if (current==null) {
              	            current = createModelElement(grammarAccess.getNativeStartMethodRule());
              	        }
                     		setWithLastConsumed(current, "name", lv_name_2_0, "Start");
              	    
            }

            }


            }

            otherlv_3=(Token)match(input,52,FOLLOW_52_in_ruleNativeStartMethod5685); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_3, grammarAccess.getNativeStartMethodAccess().getLeftParenthesisKeyword_3());
                  
            }
            otherlv_4=(Token)match(input,54,FOLLOW_54_in_ruleNativeStartMethod5697); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_4, grammarAccess.getNativeStartMethodAccess().getRightParenthesisKeyword_4());
                  
            }
            otherlv_5=(Token)match(input,29,FOLLOW_29_in_ruleNativeStartMethod5709); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_5, grammarAccess.getNativeStartMethodAccess().getSemicolonKeyword_5());
                  
            }

            }


            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleNativeStartMethod"


    // $ANTLR start "entryRuleRequiresAbstractComposition"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:2453:1: entryRuleRequiresAbstractComposition returns [EObject current=null] : iv_ruleRequiresAbstractComposition= ruleRequiresAbstractComposition EOF ;
    public final EObject entryRuleRequiresAbstractComposition() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleRequiresAbstractComposition = null;


        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:2454:2: (iv_ruleRequiresAbstractComposition= ruleRequiresAbstractComposition EOF )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:2455:2: iv_ruleRequiresAbstractComposition= ruleRequiresAbstractComposition EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getRequiresAbstractCompositionRule()); 
            }
            pushFollow(FOLLOW_ruleRequiresAbstractComposition_in_entryRuleRequiresAbstractComposition5745);
            iv_ruleRequiresAbstractComposition=ruleRequiresAbstractComposition();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleRequiresAbstractComposition; 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRuleRequiresAbstractComposition5755); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleRequiresAbstractComposition"


    // $ANTLR start "ruleRequiresAbstractComposition"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:2462:1: ruleRequiresAbstractComposition returns [EObject current=null] : (otherlv_0= 'Requires' ( (lv_name_1_0= RULE_ID ) ) otherlv_2= '[' ruleAMOUNT otherlv_4= ']' this_ASYACTIONS_5= RULE_ASYACTIONS otherlv_6= '[' ruleAMOUNT otherlv_8= ']' otherlv_9= ':' ( (lv_abstract_dynamic_switch_10_0= ruleAbstractDynamicSwitch ) ) otherlv_11= '{' ruleABSTRACT_CONDTION ruleABSTRACT_DISCRETE otherlv_14= '}' otherlv_15= ';' ) ;
    public final EObject ruleRequiresAbstractComposition() throws RecognitionException {
        EObject current = null;

        Token otherlv_0=null;
        Token lv_name_1_0=null;
        Token otherlv_2=null;
        Token otherlv_4=null;
        Token this_ASYACTIONS_5=null;
        Token otherlv_6=null;
        Token otherlv_8=null;
        Token otherlv_9=null;
        Token otherlv_11=null;
        Token otherlv_14=null;
        Token otherlv_15=null;
        EObject lv_abstract_dynamic_switch_10_0 = null;


         enterRule(); 
            
        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:2465:28: ( (otherlv_0= 'Requires' ( (lv_name_1_0= RULE_ID ) ) otherlv_2= '[' ruleAMOUNT otherlv_4= ']' this_ASYACTIONS_5= RULE_ASYACTIONS otherlv_6= '[' ruleAMOUNT otherlv_8= ']' otherlv_9= ':' ( (lv_abstract_dynamic_switch_10_0= ruleAbstractDynamicSwitch ) ) otherlv_11= '{' ruleABSTRACT_CONDTION ruleABSTRACT_DISCRETE otherlv_14= '}' otherlv_15= ';' ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:2466:1: (otherlv_0= 'Requires' ( (lv_name_1_0= RULE_ID ) ) otherlv_2= '[' ruleAMOUNT otherlv_4= ']' this_ASYACTIONS_5= RULE_ASYACTIONS otherlv_6= '[' ruleAMOUNT otherlv_8= ']' otherlv_9= ':' ( (lv_abstract_dynamic_switch_10_0= ruleAbstractDynamicSwitch ) ) otherlv_11= '{' ruleABSTRACT_CONDTION ruleABSTRACT_DISCRETE otherlv_14= '}' otherlv_15= ';' )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:2466:1: (otherlv_0= 'Requires' ( (lv_name_1_0= RULE_ID ) ) otherlv_2= '[' ruleAMOUNT otherlv_4= ']' this_ASYACTIONS_5= RULE_ASYACTIONS otherlv_6= '[' ruleAMOUNT otherlv_8= ']' otherlv_9= ':' ( (lv_abstract_dynamic_switch_10_0= ruleAbstractDynamicSwitch ) ) otherlv_11= '{' ruleABSTRACT_CONDTION ruleABSTRACT_DISCRETE otherlv_14= '}' otherlv_15= ';' )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:2466:3: otherlv_0= 'Requires' ( (lv_name_1_0= RULE_ID ) ) otherlv_2= '[' ruleAMOUNT otherlv_4= ']' this_ASYACTIONS_5= RULE_ASYACTIONS otherlv_6= '[' ruleAMOUNT otherlv_8= ']' otherlv_9= ':' ( (lv_abstract_dynamic_switch_10_0= ruleAbstractDynamicSwitch ) ) otherlv_11= '{' ruleABSTRACT_CONDTION ruleABSTRACT_DISCRETE otherlv_14= '}' otherlv_15= ';'
            {
            otherlv_0=(Token)match(input,56,FOLLOW_56_in_ruleRequiresAbstractComposition5792); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_0, grammarAccess.getRequiresAbstractCompositionAccess().getRequiresKeyword_0());
                  
            }
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:2470:1: ( (lv_name_1_0= RULE_ID ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:2471:1: (lv_name_1_0= RULE_ID )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:2471:1: (lv_name_1_0= RULE_ID )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:2472:3: lv_name_1_0= RULE_ID
            {
            lv_name_1_0=(Token)match(input,RULE_ID,FOLLOW_RULE_ID_in_ruleRequiresAbstractComposition5809); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(lv_name_1_0, grammarAccess.getRequiresAbstractCompositionAccess().getNameIDTerminalRuleCall_1_0()); 
              		
            }
            if ( state.backtracking==0 ) {

              	        if (current==null) {
              	            current = createModelElement(grammarAccess.getRequiresAbstractCompositionRule());
              	        }
                     		setWithLastConsumed(
                     			current, 
                     			"name",
                      		lv_name_1_0, 
                      		"ID");
              	    
            }

            }


            }

            otherlv_2=(Token)match(input,57,FOLLOW_57_in_ruleRequiresAbstractComposition5826); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_2, grammarAccess.getRequiresAbstractCompositionAccess().getLeftSquareBracketKeyword_2());
                  
            }
            if ( state.backtracking==0 ) {
               
                      newCompositeNode(grammarAccess.getRequiresAbstractCompositionAccess().getAMOUNTParserRuleCall_3()); 
                  
            }
            pushFollow(FOLLOW_ruleAMOUNT_in_ruleRequiresAbstractComposition5842);
            ruleAMOUNT();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               
                      afterParserOrEnumRuleCall();
                  
            }
            otherlv_4=(Token)match(input,58,FOLLOW_58_in_ruleRequiresAbstractComposition5853); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_4, grammarAccess.getRequiresAbstractCompositionAccess().getRightSquareBracketKeyword_4());
                  
            }
            this_ASYACTIONS_5=(Token)match(input,RULE_ASYACTIONS,FOLLOW_RULE_ASYACTIONS_in_ruleRequiresAbstractComposition5864); if (state.failed) return current;
            if ( state.backtracking==0 ) {
               
                  newLeafNode(this_ASYACTIONS_5, grammarAccess.getRequiresAbstractCompositionAccess().getASYACTIONSTerminalRuleCall_5()); 
                  
            }
            otherlv_6=(Token)match(input,57,FOLLOW_57_in_ruleRequiresAbstractComposition5875); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_6, grammarAccess.getRequiresAbstractCompositionAccess().getLeftSquareBracketKeyword_6());
                  
            }
            if ( state.backtracking==0 ) {
               
                      newCompositeNode(grammarAccess.getRequiresAbstractCompositionAccess().getAMOUNTParserRuleCall_7()); 
                  
            }
            pushFollow(FOLLOW_ruleAMOUNT_in_ruleRequiresAbstractComposition5891);
            ruleAMOUNT();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               
                      afterParserOrEnumRuleCall();
                  
            }
            otherlv_8=(Token)match(input,58,FOLLOW_58_in_ruleRequiresAbstractComposition5902); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_8, grammarAccess.getRequiresAbstractCompositionAccess().getRightSquareBracketKeyword_8());
                  
            }
            otherlv_9=(Token)match(input,59,FOLLOW_59_in_ruleRequiresAbstractComposition5914); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_9, grammarAccess.getRequiresAbstractCompositionAccess().getColonKeyword_9());
                  
            }
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:2528:1: ( (lv_abstract_dynamic_switch_10_0= ruleAbstractDynamicSwitch ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:2529:1: (lv_abstract_dynamic_switch_10_0= ruleAbstractDynamicSwitch )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:2529:1: (lv_abstract_dynamic_switch_10_0= ruleAbstractDynamicSwitch )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:2530:3: lv_abstract_dynamic_switch_10_0= ruleAbstractDynamicSwitch
            {
            if ( state.backtracking==0 ) {
               
              	        newCompositeNode(grammarAccess.getRequiresAbstractCompositionAccess().getAbstract_dynamic_switchAbstractDynamicSwitchParserRuleCall_10_0()); 
              	    
            }
            pushFollow(FOLLOW_ruleAbstractDynamicSwitch_in_ruleRequiresAbstractComposition5935);
            lv_abstract_dynamic_switch_10_0=ruleAbstractDynamicSwitch();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              	        if (current==null) {
              	            current = createModelElementForParent(grammarAccess.getRequiresAbstractCompositionRule());
              	        }
                     		set(
                     			current, 
                     			"abstract_dynamic_switch",
                      		lv_abstract_dynamic_switch_10_0, 
                      		"AbstractDynamicSwitch");
              	        afterParserOrEnumRuleCall();
              	    
            }

            }


            }

            otherlv_11=(Token)match(input,47,FOLLOW_47_in_ruleRequiresAbstractComposition5947); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_11, grammarAccess.getRequiresAbstractCompositionAccess().getLeftCurlyBracketKeyword_11());
                  
            }
            if ( state.backtracking==0 ) {
               
                      newCompositeNode(grammarAccess.getRequiresAbstractCompositionAccess().getABSTRACT_CONDTIONParserRuleCall_12()); 
                  
            }
            pushFollow(FOLLOW_ruleABSTRACT_CONDTION_in_ruleRequiresAbstractComposition5963);
            ruleABSTRACT_CONDTION();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               
                      afterParserOrEnumRuleCall();
                  
            }
            if ( state.backtracking==0 ) {
               
                      newCompositeNode(grammarAccess.getRequiresAbstractCompositionAccess().getABSTRACT_DISCRETEParserRuleCall_13()); 
                  
            }
            pushFollow(FOLLOW_ruleABSTRACT_DISCRETE_in_ruleRequiresAbstractComposition5978);
            ruleABSTRACT_DISCRETE();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               
                      afterParserOrEnumRuleCall();
                  
            }
            otherlv_14=(Token)match(input,48,FOLLOW_48_in_ruleRequiresAbstractComposition5989); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_14, grammarAccess.getRequiresAbstractCompositionAccess().getRightCurlyBracketKeyword_14());
                  
            }
            otherlv_15=(Token)match(input,29,FOLLOW_29_in_ruleRequiresAbstractComposition6001); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_15, grammarAccess.getRequiresAbstractCompositionAccess().getSemicolonKeyword_15());
                  
            }

            }


            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleRequiresAbstractComposition"


    // $ANTLR start "entryRuleABSTRACT_DISCRETE"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:2582:1: entryRuleABSTRACT_DISCRETE returns [String current=null] : iv_ruleABSTRACT_DISCRETE= ruleABSTRACT_DISCRETE EOF ;
    public final String entryRuleABSTRACT_DISCRETE() throws RecognitionException {
        String current = null;

        AntlrDatatypeRuleToken iv_ruleABSTRACT_DISCRETE = null;


        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:2583:2: (iv_ruleABSTRACT_DISCRETE= ruleABSTRACT_DISCRETE EOF )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:2584:2: iv_ruleABSTRACT_DISCRETE= ruleABSTRACT_DISCRETE EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getABSTRACT_DISCRETERule()); 
            }
            pushFollow(FOLLOW_ruleABSTRACT_DISCRETE_in_entryRuleABSTRACT_DISCRETE6038);
            iv_ruleABSTRACT_DISCRETE=ruleABSTRACT_DISCRETE();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleABSTRACT_DISCRETE.getText(); 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRuleABSTRACT_DISCRETE6049); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleABSTRACT_DISCRETE"


    // $ANTLR start "ruleABSTRACT_DISCRETE"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:2591:1: ruleABSTRACT_DISCRETE returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : (kw= 'Discrete' kw= '{' kw= '}' kw= ';' ) ;
    public final AntlrDatatypeRuleToken ruleABSTRACT_DISCRETE() throws RecognitionException {
        AntlrDatatypeRuleToken current = new AntlrDatatypeRuleToken();

        Token kw=null;

         enterRule(); 
            
        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:2594:28: ( (kw= 'Discrete' kw= '{' kw= '}' kw= ';' ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:2595:1: (kw= 'Discrete' kw= '{' kw= '}' kw= ';' )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:2595:1: (kw= 'Discrete' kw= '{' kw= '}' kw= ';' )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:2596:2: kw= 'Discrete' kw= '{' kw= '}' kw= ';'
            {
            kw=(Token)match(input,64,FOLLOW_64_in_ruleABSTRACT_DISCRETE6087); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                      current.merge(kw);
                      newLeafNode(kw, grammarAccess.getABSTRACT_DISCRETEAccess().getDiscreteKeyword_0()); 
                  
            }
            kw=(Token)match(input,47,FOLLOW_47_in_ruleABSTRACT_DISCRETE6100); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                      current.merge(kw);
                      newLeafNode(kw, grammarAccess.getABSTRACT_DISCRETEAccess().getLeftCurlyBracketKeyword_1()); 
                  
            }
            kw=(Token)match(input,48,FOLLOW_48_in_ruleABSTRACT_DISCRETE6113); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                      current.merge(kw);
                      newLeafNode(kw, grammarAccess.getABSTRACT_DISCRETEAccess().getRightCurlyBracketKeyword_2()); 
                  
            }
            kw=(Token)match(input,29,FOLLOW_29_in_ruleABSTRACT_DISCRETE6126); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                      current.merge(kw);
                      newLeafNode(kw, grammarAccess.getABSTRACT_DISCRETEAccess().getSemicolonKeyword_3()); 
                  
            }

            }


            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleABSTRACT_DISCRETE"


    // $ANTLR start "entryRuleClockConstraint"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:2627:1: entryRuleClockConstraint returns [EObject current=null] : iv_ruleClockConstraint= ruleClockConstraint EOF ;
    public final EObject entryRuleClockConstraint() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleClockConstraint = null;


        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:2628:2: (iv_ruleClockConstraint= ruleClockConstraint EOF )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:2629:2: iv_ruleClockConstraint= ruleClockConstraint EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getClockConstraintRule()); 
            }
            pushFollow(FOLLOW_ruleClockConstraint_in_entryRuleClockConstraint6166);
            iv_ruleClockConstraint=ruleClockConstraint();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleClockConstraint; 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRuleClockConstraint6176); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleClockConstraint"


    // $ANTLR start "ruleClockConstraint"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:2636:1: ruleClockConstraint returns [EObject current=null] : ( () otherlv_1= 'Constraint' ( (lv_name_2_0= RULE_CLOCK ) ) otherlv_3= ';' ) ;
    public final EObject ruleClockConstraint() throws RecognitionException {
        EObject current = null;

        Token otherlv_1=null;
        Token lv_name_2_0=null;
        Token otherlv_3=null;

         enterRule(); 
            
        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:2639:28: ( ( () otherlv_1= 'Constraint' ( (lv_name_2_0= RULE_CLOCK ) ) otherlv_3= ';' ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:2640:1: ( () otherlv_1= 'Constraint' ( (lv_name_2_0= RULE_CLOCK ) ) otherlv_3= ';' )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:2640:1: ( () otherlv_1= 'Constraint' ( (lv_name_2_0= RULE_CLOCK ) ) otherlv_3= ';' )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:2640:2: () otherlv_1= 'Constraint' ( (lv_name_2_0= RULE_CLOCK ) ) otherlv_3= ';'
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:2640:2: ()
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:2641:5: 
            {
            if ( state.backtracking==0 ) {

                      current = forceCreateModelElement(
                          grammarAccess.getClockConstraintAccess().getClockConstraintAction_0(),
                          current);
                  
            }

            }

            otherlv_1=(Token)match(input,65,FOLLOW_65_in_ruleClockConstraint6222); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_1, grammarAccess.getClockConstraintAccess().getConstraintKeyword_1());
                  
            }
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:2650:1: ( (lv_name_2_0= RULE_CLOCK ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:2651:1: (lv_name_2_0= RULE_CLOCK )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:2651:1: (lv_name_2_0= RULE_CLOCK )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:2652:3: lv_name_2_0= RULE_CLOCK
            {
            lv_name_2_0=(Token)match(input,RULE_CLOCK,FOLLOW_RULE_CLOCK_in_ruleClockConstraint6239); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(lv_name_2_0, grammarAccess.getClockConstraintAccess().getNameCLOCKTerminalRuleCall_2_0()); 
              		
            }
            if ( state.backtracking==0 ) {

              	        if (current==null) {
              	            current = createModelElement(grammarAccess.getClockConstraintRule());
              	        }
                     		setWithLastConsumed(
                     			current, 
                     			"name",
                      		lv_name_2_0, 
                      		"CLOCK");
              	    
            }

            }


            }

            otherlv_3=(Token)match(input,29,FOLLOW_29_in_ruleClockConstraint6256); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_3, grammarAccess.getClockConstraintAccess().getSemicolonKeyword_3());
                  
            }

            }


            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleClockConstraint"


    // $ANTLR start "entryRuleAbstractInvariant"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:2680:1: entryRuleAbstractInvariant returns [EObject current=null] : iv_ruleAbstractInvariant= ruleAbstractInvariant EOF ;
    public final EObject entryRuleAbstractInvariant() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleAbstractInvariant = null;


        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:2681:2: (iv_ruleAbstractInvariant= ruleAbstractInvariant EOF )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:2682:2: iv_ruleAbstractInvariant= ruleAbstractInvariant EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getAbstractInvariantRule()); 
            }
            pushFollow(FOLLOW_ruleAbstractInvariant_in_entryRuleAbstractInvariant6292);
            iv_ruleAbstractInvariant=ruleAbstractInvariant();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleAbstractInvariant; 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRuleAbstractInvariant6302); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleAbstractInvariant"


    // $ANTLR start "ruleAbstractInvariant"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:2689:1: ruleAbstractInvariant returns [EObject current=null] : ( () ( (lv_name_1_0= 'Invariant' ) ) otherlv_2= '{' otherlv_3= '}' otherlv_4= ';' ) ;
    public final EObject ruleAbstractInvariant() throws RecognitionException {
        EObject current = null;

        Token lv_name_1_0=null;
        Token otherlv_2=null;
        Token otherlv_3=null;
        Token otherlv_4=null;

         enterRule(); 
            
        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:2692:28: ( ( () ( (lv_name_1_0= 'Invariant' ) ) otherlv_2= '{' otherlv_3= '}' otherlv_4= ';' ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:2693:1: ( () ( (lv_name_1_0= 'Invariant' ) ) otherlv_2= '{' otherlv_3= '}' otherlv_4= ';' )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:2693:1: ( () ( (lv_name_1_0= 'Invariant' ) ) otherlv_2= '{' otherlv_3= '}' otherlv_4= ';' )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:2693:2: () ( (lv_name_1_0= 'Invariant' ) ) otherlv_2= '{' otherlv_3= '}' otherlv_4= ';'
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:2693:2: ()
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:2694:5: 
            {
            if ( state.backtracking==0 ) {

                      current = forceCreateModelElement(
                          grammarAccess.getAbstractInvariantAccess().getAbstractInvariantAction_0(),
                          current);
                  
            }

            }

            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:2699:2: ( (lv_name_1_0= 'Invariant' ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:2700:1: (lv_name_1_0= 'Invariant' )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:2700:1: (lv_name_1_0= 'Invariant' )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:2701:3: lv_name_1_0= 'Invariant'
            {
            lv_name_1_0=(Token)match(input,66,FOLLOW_66_in_ruleAbstractInvariant6354); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                      newLeafNode(lv_name_1_0, grammarAccess.getAbstractInvariantAccess().getNameInvariantKeyword_1_0());
                  
            }
            if ( state.backtracking==0 ) {

              	        if (current==null) {
              	            current = createModelElement(grammarAccess.getAbstractInvariantRule());
              	        }
                     		setWithLastConsumed(current, "name", lv_name_1_0, "Invariant");
              	    
            }

            }


            }

            otherlv_2=(Token)match(input,47,FOLLOW_47_in_ruleAbstractInvariant6379); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_2, grammarAccess.getAbstractInvariantAccess().getLeftCurlyBracketKeyword_2());
                  
            }
            otherlv_3=(Token)match(input,48,FOLLOW_48_in_ruleAbstractInvariant6391); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_3, grammarAccess.getAbstractInvariantAccess().getRightCurlyBracketKeyword_3());
                  
            }
            otherlv_4=(Token)match(input,29,FOLLOW_29_in_ruleAbstractInvariant6403); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_4, grammarAccess.getAbstractInvariantAccess().getSemicolonKeyword_4());
                  
            }

            }


            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleAbstractInvariant"


    // $ANTLR start "entryRuleExpression"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:2734:1: entryRuleExpression returns [EObject current=null] : iv_ruleExpression= ruleExpression EOF ;
    public final EObject entryRuleExpression() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleExpression = null;


        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:2735:2: (iv_ruleExpression= ruleExpression EOF )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:2736:2: iv_ruleExpression= ruleExpression EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getExpressionRule()); 
            }
            pushFollow(FOLLOW_ruleExpression_in_entryRuleExpression6439);
            iv_ruleExpression=ruleExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleExpression; 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRuleExpression6449); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleExpression"


    // $ANTLR start "ruleExpression"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:2743:1: ruleExpression returns [EObject current=null] : (this_ConditionalExpression_0= ruleConditionalExpression ( ( ( ( ruleAssignmentOperator ) )=> (lv_assignmentoperator_1_0= ruleAssignmentOperator ) ) ( (lv_expression_2_0= ruleExpression ) ) )? ) ;
    public final EObject ruleExpression() throws RecognitionException {
        EObject current = null;

        EObject this_ConditionalExpression_0 = null;

        AntlrDatatypeRuleToken lv_assignmentoperator_1_0 = null;

        EObject lv_expression_2_0 = null;


         enterRule(); 
            
        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:2746:28: ( (this_ConditionalExpression_0= ruleConditionalExpression ( ( ( ( ruleAssignmentOperator ) )=> (lv_assignmentoperator_1_0= ruleAssignmentOperator ) ) ( (lv_expression_2_0= ruleExpression ) ) )? ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:2747:1: (this_ConditionalExpression_0= ruleConditionalExpression ( ( ( ( ruleAssignmentOperator ) )=> (lv_assignmentoperator_1_0= ruleAssignmentOperator ) ) ( (lv_expression_2_0= ruleExpression ) ) )? )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:2747:1: (this_ConditionalExpression_0= ruleConditionalExpression ( ( ( ( ruleAssignmentOperator ) )=> (lv_assignmentoperator_1_0= ruleAssignmentOperator ) ) ( (lv_expression_2_0= ruleExpression ) ) )? )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:2748:5: this_ConditionalExpression_0= ruleConditionalExpression ( ( ( ( ruleAssignmentOperator ) )=> (lv_assignmentoperator_1_0= ruleAssignmentOperator ) ) ( (lv_expression_2_0= ruleExpression ) ) )?
            {
            if ( state.backtracking==0 ) {
               
                      newCompositeNode(grammarAccess.getExpressionAccess().getConditionalExpressionParserRuleCall_0()); 
                  
            }
            pushFollow(FOLLOW_ruleConditionalExpression_in_ruleExpression6496);
            this_ConditionalExpression_0=ruleConditionalExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               
                      current = this_ConditionalExpression_0; 
                      afterParserOrEnumRuleCall();
                  
            }
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:2756:1: ( ( ( ( ruleAssignmentOperator ) )=> (lv_assignmentoperator_1_0= ruleAssignmentOperator ) ) ( (lv_expression_2_0= ruleExpression ) ) )?
            int alt42=2;
            alt42 = dfa42.predict(input);
            switch (alt42) {
                case 1 :
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:2756:2: ( ( ( ruleAssignmentOperator ) )=> (lv_assignmentoperator_1_0= ruleAssignmentOperator ) ) ( (lv_expression_2_0= ruleExpression ) )
                    {
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:2756:2: ( ( ( ruleAssignmentOperator ) )=> (lv_assignmentoperator_1_0= ruleAssignmentOperator ) )
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:2756:3: ( ( ruleAssignmentOperator ) )=> (lv_assignmentoperator_1_0= ruleAssignmentOperator )
                    {
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:2761:1: (lv_assignmentoperator_1_0= ruleAssignmentOperator )
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:2762:3: lv_assignmentoperator_1_0= ruleAssignmentOperator
                    {
                    if ( state.backtracking==0 ) {
                       
                      	        newCompositeNode(grammarAccess.getExpressionAccess().getAssignmentoperatorAssignmentOperatorParserRuleCall_1_0_0()); 
                      	    
                    }
                    pushFollow(FOLLOW_ruleAssignmentOperator_in_ruleExpression6527);
                    lv_assignmentoperator_1_0=ruleAssignmentOperator();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      	        if (current==null) {
                      	            current = createModelElementForParent(grammarAccess.getExpressionRule());
                      	        }
                             		set(
                             			current, 
                             			"assignmentoperator",
                              		lv_assignmentoperator_1_0, 
                              		"AssignmentOperator");
                      	        afterParserOrEnumRuleCall();
                      	    
                    }

                    }


                    }

                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:2778:2: ( (lv_expression_2_0= ruleExpression ) )
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:2779:1: (lv_expression_2_0= ruleExpression )
                    {
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:2779:1: (lv_expression_2_0= ruleExpression )
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:2780:3: lv_expression_2_0= ruleExpression
                    {
                    if ( state.backtracking==0 ) {
                       
                      	        newCompositeNode(grammarAccess.getExpressionAccess().getExpressionExpressionParserRuleCall_1_1_0()); 
                      	    
                    }
                    pushFollow(FOLLOW_ruleExpression_in_ruleExpression6548);
                    lv_expression_2_0=ruleExpression();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      	        if (current==null) {
                      	            current = createModelElementForParent(grammarAccess.getExpressionRule());
                      	        }
                             		set(
                             			current, 
                             			"expression",
                              		lv_expression_2_0, 
                              		"Expression");
                      	        afterParserOrEnumRuleCall();
                      	    
                    }

                    }


                    }


                    }
                    break;

            }


            }


            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleExpression"


    // $ANTLR start "entryRuleAssignmentOperator"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:2804:1: entryRuleAssignmentOperator returns [String current=null] : iv_ruleAssignmentOperator= ruleAssignmentOperator EOF ;
    public final String entryRuleAssignmentOperator() throws RecognitionException {
        String current = null;

        AntlrDatatypeRuleToken iv_ruleAssignmentOperator = null;


        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:2805:2: (iv_ruleAssignmentOperator= ruleAssignmentOperator EOF )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:2806:2: iv_ruleAssignmentOperator= ruleAssignmentOperator EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getAssignmentOperatorRule()); 
            }
            pushFollow(FOLLOW_ruleAssignmentOperator_in_entryRuleAssignmentOperator6587);
            iv_ruleAssignmentOperator=ruleAssignmentOperator();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleAssignmentOperator.getText(); 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRuleAssignmentOperator6598); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleAssignmentOperator"


    // $ANTLR start "ruleAssignmentOperator"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:2813:1: ruleAssignmentOperator returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : (kw= '=' | kw= '+=' | kw= '-=' | kw= '*=' | kw= '/=' | kw= '&=' | kw= '|=' | kw= '^=' | kw= '%=' ) ;
    public final AntlrDatatypeRuleToken ruleAssignmentOperator() throws RecognitionException {
        AntlrDatatypeRuleToken current = new AntlrDatatypeRuleToken();

        Token kw=null;

         enterRule(); 
            
        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:2816:28: ( (kw= '=' | kw= '+=' | kw= '-=' | kw= '*=' | kw= '/=' | kw= '&=' | kw= '|=' | kw= '^=' | kw= '%=' ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:2817:1: (kw= '=' | kw= '+=' | kw= '-=' | kw= '*=' | kw= '/=' | kw= '&=' | kw= '|=' | kw= '^=' | kw= '%=' )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:2817:1: (kw= '=' | kw= '+=' | kw= '-=' | kw= '*=' | kw= '/=' | kw= '&=' | kw= '|=' | kw= '^=' | kw= '%=' )
            int alt43=9;
            switch ( input.LA(1) ) {
            case 51:
                {
                alt43=1;
                }
                break;
            case 67:
                {
                alt43=2;
                }
                break;
            case 68:
                {
                alt43=3;
                }
                break;
            case 69:
                {
                alt43=4;
                }
                break;
            case 70:
                {
                alt43=5;
                }
                break;
            case 71:
                {
                alt43=6;
                }
                break;
            case 72:
                {
                alt43=7;
                }
                break;
            case 73:
                {
                alt43=8;
                }
                break;
            case 74:
                {
                alt43=9;
                }
                break;
            default:
                if (state.backtracking>0) {state.failed=true; return current;}
                NoViableAltException nvae =
                    new NoViableAltException("", 43, 0, input);

                throw nvae;
            }

            switch (alt43) {
                case 1 :
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:2818:2: kw= '='
                    {
                    kw=(Token)match(input,51,FOLLOW_51_in_ruleAssignmentOperator6636); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                              current.merge(kw);
                              newLeafNode(kw, grammarAccess.getAssignmentOperatorAccess().getEqualsSignKeyword_0()); 
                          
                    }

                    }
                    break;
                case 2 :
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:2825:2: kw= '+='
                    {
                    kw=(Token)match(input,67,FOLLOW_67_in_ruleAssignmentOperator6655); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                              current.merge(kw);
                              newLeafNode(kw, grammarAccess.getAssignmentOperatorAccess().getPlusSignEqualsSignKeyword_1()); 
                          
                    }

                    }
                    break;
                case 3 :
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:2832:2: kw= '-='
                    {
                    kw=(Token)match(input,68,FOLLOW_68_in_ruleAssignmentOperator6674); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                              current.merge(kw);
                              newLeafNode(kw, grammarAccess.getAssignmentOperatorAccess().getHyphenMinusEqualsSignKeyword_2()); 
                          
                    }

                    }
                    break;
                case 4 :
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:2839:2: kw= '*='
                    {
                    kw=(Token)match(input,69,FOLLOW_69_in_ruleAssignmentOperator6693); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                              current.merge(kw);
                              newLeafNode(kw, grammarAccess.getAssignmentOperatorAccess().getAsteriskEqualsSignKeyword_3()); 
                          
                    }

                    }
                    break;
                case 5 :
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:2846:2: kw= '/='
                    {
                    kw=(Token)match(input,70,FOLLOW_70_in_ruleAssignmentOperator6712); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                              current.merge(kw);
                              newLeafNode(kw, grammarAccess.getAssignmentOperatorAccess().getSolidusEqualsSignKeyword_4()); 
                          
                    }

                    }
                    break;
                case 6 :
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:2853:2: kw= '&='
                    {
                    kw=(Token)match(input,71,FOLLOW_71_in_ruleAssignmentOperator6731); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                              current.merge(kw);
                              newLeafNode(kw, grammarAccess.getAssignmentOperatorAccess().getAmpersandEqualsSignKeyword_5()); 
                          
                    }

                    }
                    break;
                case 7 :
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:2860:2: kw= '|='
                    {
                    kw=(Token)match(input,72,FOLLOW_72_in_ruleAssignmentOperator6750); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                              current.merge(kw);
                              newLeafNode(kw, grammarAccess.getAssignmentOperatorAccess().getVerticalLineEqualsSignKeyword_6()); 
                          
                    }

                    }
                    break;
                case 8 :
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:2867:2: kw= '^='
                    {
                    kw=(Token)match(input,73,FOLLOW_73_in_ruleAssignmentOperator6769); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                              current.merge(kw);
                              newLeafNode(kw, grammarAccess.getAssignmentOperatorAccess().getCircumflexAccentEqualsSignKeyword_7()); 
                          
                    }

                    }
                    break;
                case 9 :
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:2874:2: kw= '%='
                    {
                    kw=(Token)match(input,74,FOLLOW_74_in_ruleAssignmentOperator6788); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                              current.merge(kw);
                              newLeafNode(kw, grammarAccess.getAssignmentOperatorAccess().getPercentSignEqualsSignKeyword_8()); 
                          
                    }

                    }
                    break;

            }


            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleAssignmentOperator"


    // $ANTLR start "entryRuleConditionalExpression"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:2887:1: entryRuleConditionalExpression returns [EObject current=null] : iv_ruleConditionalExpression= ruleConditionalExpression EOF ;
    public final EObject entryRuleConditionalExpression() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleConditionalExpression = null;


        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:2888:2: (iv_ruleConditionalExpression= ruleConditionalExpression EOF )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:2889:2: iv_ruleConditionalExpression= ruleConditionalExpression EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getConditionalExpressionRule()); 
            }
            pushFollow(FOLLOW_ruleConditionalExpression_in_entryRuleConditionalExpression6828);
            iv_ruleConditionalExpression=ruleConditionalExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleConditionalExpression; 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRuleConditionalExpression6838); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleConditionalExpression"


    // $ANTLR start "ruleConditionalExpression"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:2896:1: ruleConditionalExpression returns [EObject current=null] : ( ( (lv_conditionalorexpression_0_0= ruleConditionalOrExpression ) ) (otherlv_1= '?' ( (lv_expression1_2_0= ruleExpression ) ) otherlv_3= ':' ( (lv_expression2_4_0= ruleExpression ) ) )? ) ;
    public final EObject ruleConditionalExpression() throws RecognitionException {
        EObject current = null;

        Token otherlv_1=null;
        Token otherlv_3=null;
        EObject lv_conditionalorexpression_0_0 = null;

        EObject lv_expression1_2_0 = null;

        EObject lv_expression2_4_0 = null;


         enterRule(); 
            
        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:2899:28: ( ( ( (lv_conditionalorexpression_0_0= ruleConditionalOrExpression ) ) (otherlv_1= '?' ( (lv_expression1_2_0= ruleExpression ) ) otherlv_3= ':' ( (lv_expression2_4_0= ruleExpression ) ) )? ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:2900:1: ( ( (lv_conditionalorexpression_0_0= ruleConditionalOrExpression ) ) (otherlv_1= '?' ( (lv_expression1_2_0= ruleExpression ) ) otherlv_3= ':' ( (lv_expression2_4_0= ruleExpression ) ) )? )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:2900:1: ( ( (lv_conditionalorexpression_0_0= ruleConditionalOrExpression ) ) (otherlv_1= '?' ( (lv_expression1_2_0= ruleExpression ) ) otherlv_3= ':' ( (lv_expression2_4_0= ruleExpression ) ) )? )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:2900:2: ( (lv_conditionalorexpression_0_0= ruleConditionalOrExpression ) ) (otherlv_1= '?' ( (lv_expression1_2_0= ruleExpression ) ) otherlv_3= ':' ( (lv_expression2_4_0= ruleExpression ) ) )?
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:2900:2: ( (lv_conditionalorexpression_0_0= ruleConditionalOrExpression ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:2901:1: (lv_conditionalorexpression_0_0= ruleConditionalOrExpression )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:2901:1: (lv_conditionalorexpression_0_0= ruleConditionalOrExpression )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:2902:3: lv_conditionalorexpression_0_0= ruleConditionalOrExpression
            {
            if ( state.backtracking==0 ) {
               
              	        newCompositeNode(grammarAccess.getConditionalExpressionAccess().getConditionalorexpressionConditionalOrExpressionParserRuleCall_0_0()); 
              	    
            }
            pushFollow(FOLLOW_ruleConditionalOrExpression_in_ruleConditionalExpression6884);
            lv_conditionalorexpression_0_0=ruleConditionalOrExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              	        if (current==null) {
              	            current = createModelElementForParent(grammarAccess.getConditionalExpressionRule());
              	        }
                     		set(
                     			current, 
                     			"conditionalorexpression",
                      		lv_conditionalorexpression_0_0, 
                      		"ConditionalOrExpression");
              	        afterParserOrEnumRuleCall();
              	    
            }

            }


            }

            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:2918:2: (otherlv_1= '?' ( (lv_expression1_2_0= ruleExpression ) ) otherlv_3= ':' ( (lv_expression2_4_0= ruleExpression ) ) )?
            int alt44=2;
            int LA44_0 = input.LA(1);

            if ( (LA44_0==75) ) {
                alt44=1;
            }
            switch (alt44) {
                case 1 :
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:2918:4: otherlv_1= '?' ( (lv_expression1_2_0= ruleExpression ) ) otherlv_3= ':' ( (lv_expression2_4_0= ruleExpression ) )
                    {
                    otherlv_1=(Token)match(input,75,FOLLOW_75_in_ruleConditionalExpression6897); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                          	newLeafNode(otherlv_1, grammarAccess.getConditionalExpressionAccess().getQuestionMarkKeyword_1_0());
                          
                    }
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:2922:1: ( (lv_expression1_2_0= ruleExpression ) )
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:2923:1: (lv_expression1_2_0= ruleExpression )
                    {
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:2923:1: (lv_expression1_2_0= ruleExpression )
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:2924:3: lv_expression1_2_0= ruleExpression
                    {
                    if ( state.backtracking==0 ) {
                       
                      	        newCompositeNode(grammarAccess.getConditionalExpressionAccess().getExpression1ExpressionParserRuleCall_1_1_0()); 
                      	    
                    }
                    pushFollow(FOLLOW_ruleExpression_in_ruleConditionalExpression6918);
                    lv_expression1_2_0=ruleExpression();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      	        if (current==null) {
                      	            current = createModelElementForParent(grammarAccess.getConditionalExpressionRule());
                      	        }
                             		set(
                             			current, 
                             			"expression1",
                              		lv_expression1_2_0, 
                              		"Expression");
                      	        afterParserOrEnumRuleCall();
                      	    
                    }

                    }


                    }

                    otherlv_3=(Token)match(input,59,FOLLOW_59_in_ruleConditionalExpression6930); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                          	newLeafNode(otherlv_3, grammarAccess.getConditionalExpressionAccess().getColonKeyword_1_2());
                          
                    }
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:2944:1: ( (lv_expression2_4_0= ruleExpression ) )
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:2945:1: (lv_expression2_4_0= ruleExpression )
                    {
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:2945:1: (lv_expression2_4_0= ruleExpression )
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:2946:3: lv_expression2_4_0= ruleExpression
                    {
                    if ( state.backtracking==0 ) {
                       
                      	        newCompositeNode(grammarAccess.getConditionalExpressionAccess().getExpression2ExpressionParserRuleCall_1_3_0()); 
                      	    
                    }
                    pushFollow(FOLLOW_ruleExpression_in_ruleConditionalExpression6951);
                    lv_expression2_4_0=ruleExpression();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      	        if (current==null) {
                      	            current = createModelElementForParent(grammarAccess.getConditionalExpressionRule());
                      	        }
                             		set(
                             			current, 
                             			"expression2",
                              		lv_expression2_4_0, 
                              		"Expression");
                      	        afterParserOrEnumRuleCall();
                      	    
                    }

                    }


                    }


                    }
                    break;

            }


            }


            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleConditionalExpression"


    // $ANTLR start "entryRuleConditionalOrExpression"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:2970:1: entryRuleConditionalOrExpression returns [EObject current=null] : iv_ruleConditionalOrExpression= ruleConditionalOrExpression EOF ;
    public final EObject entryRuleConditionalOrExpression() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleConditionalOrExpression = null;


        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:2971:2: (iv_ruleConditionalOrExpression= ruleConditionalOrExpression EOF )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:2972:2: iv_ruleConditionalOrExpression= ruleConditionalOrExpression EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getConditionalOrExpressionRule()); 
            }
            pushFollow(FOLLOW_ruleConditionalOrExpression_in_entryRuleConditionalOrExpression6989);
            iv_ruleConditionalOrExpression=ruleConditionalOrExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleConditionalOrExpression; 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRuleConditionalOrExpression6999); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleConditionalOrExpression"


    // $ANTLR start "ruleConditionalOrExpression"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:2979:1: ruleConditionalOrExpression returns [EObject current=null] : ( ( (lv_conditionalandexpression_0_0= ruleConditionalAndExpression ) ) (otherlv_1= 'or' ( (lv_conditionalandexpression_2_0= ruleConditionalAndExpression ) ) )* ) ;
    public final EObject ruleConditionalOrExpression() throws RecognitionException {
        EObject current = null;

        Token otherlv_1=null;
        EObject lv_conditionalandexpression_0_0 = null;

        EObject lv_conditionalandexpression_2_0 = null;


         enterRule(); 
            
        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:2982:28: ( ( ( (lv_conditionalandexpression_0_0= ruleConditionalAndExpression ) ) (otherlv_1= 'or' ( (lv_conditionalandexpression_2_0= ruleConditionalAndExpression ) ) )* ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:2983:1: ( ( (lv_conditionalandexpression_0_0= ruleConditionalAndExpression ) ) (otherlv_1= 'or' ( (lv_conditionalandexpression_2_0= ruleConditionalAndExpression ) ) )* )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:2983:1: ( ( (lv_conditionalandexpression_0_0= ruleConditionalAndExpression ) ) (otherlv_1= 'or' ( (lv_conditionalandexpression_2_0= ruleConditionalAndExpression ) ) )* )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:2983:2: ( (lv_conditionalandexpression_0_0= ruleConditionalAndExpression ) ) (otherlv_1= 'or' ( (lv_conditionalandexpression_2_0= ruleConditionalAndExpression ) ) )*
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:2983:2: ( (lv_conditionalandexpression_0_0= ruleConditionalAndExpression ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:2984:1: (lv_conditionalandexpression_0_0= ruleConditionalAndExpression )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:2984:1: (lv_conditionalandexpression_0_0= ruleConditionalAndExpression )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:2985:3: lv_conditionalandexpression_0_0= ruleConditionalAndExpression
            {
            if ( state.backtracking==0 ) {
               
              	        newCompositeNode(grammarAccess.getConditionalOrExpressionAccess().getConditionalandexpressionConditionalAndExpressionParserRuleCall_0_0()); 
              	    
            }
            pushFollow(FOLLOW_ruleConditionalAndExpression_in_ruleConditionalOrExpression7045);
            lv_conditionalandexpression_0_0=ruleConditionalAndExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              	        if (current==null) {
              	            current = createModelElementForParent(grammarAccess.getConditionalOrExpressionRule());
              	        }
                     		add(
                     			current, 
                     			"conditionalandexpression",
                      		lv_conditionalandexpression_0_0, 
                      		"ConditionalAndExpression");
              	        afterParserOrEnumRuleCall();
              	    
            }

            }


            }

            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3001:2: (otherlv_1= 'or' ( (lv_conditionalandexpression_2_0= ruleConditionalAndExpression ) ) )*
            loop45:
            do {
                int alt45=2;
                int LA45_0 = input.LA(1);

                if ( (LA45_0==76) ) {
                    alt45=1;
                }


                switch (alt45) {
            	case 1 :
            	    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3001:4: otherlv_1= 'or' ( (lv_conditionalandexpression_2_0= ruleConditionalAndExpression ) )
            	    {
            	    otherlv_1=(Token)match(input,76,FOLLOW_76_in_ruleConditionalOrExpression7058); if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	          	newLeafNode(otherlv_1, grammarAccess.getConditionalOrExpressionAccess().getOrKeyword_1_0());
            	          
            	    }
            	    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3005:1: ( (lv_conditionalandexpression_2_0= ruleConditionalAndExpression ) )
            	    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3006:1: (lv_conditionalandexpression_2_0= ruleConditionalAndExpression )
            	    {
            	    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3006:1: (lv_conditionalandexpression_2_0= ruleConditionalAndExpression )
            	    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3007:3: lv_conditionalandexpression_2_0= ruleConditionalAndExpression
            	    {
            	    if ( state.backtracking==0 ) {
            	       
            	      	        newCompositeNode(grammarAccess.getConditionalOrExpressionAccess().getConditionalandexpressionConditionalAndExpressionParserRuleCall_1_1_0()); 
            	      	    
            	    }
            	    pushFollow(FOLLOW_ruleConditionalAndExpression_in_ruleConditionalOrExpression7079);
            	    lv_conditionalandexpression_2_0=ruleConditionalAndExpression();

            	    state._fsp--;
            	    if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      	        if (current==null) {
            	      	            current = createModelElementForParent(grammarAccess.getConditionalOrExpressionRule());
            	      	        }
            	             		add(
            	             			current, 
            	             			"conditionalandexpression",
            	              		lv_conditionalandexpression_2_0, 
            	              		"ConditionalAndExpression");
            	      	        afterParserOrEnumRuleCall();
            	      	    
            	    }

            	    }


            	    }


            	    }
            	    break;

            	default :
            	    break loop45;
                }
            } while (true);


            }


            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleConditionalOrExpression"


    // $ANTLR start "entryRuleConditionalAndExpression"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3031:1: entryRuleConditionalAndExpression returns [EObject current=null] : iv_ruleConditionalAndExpression= ruleConditionalAndExpression EOF ;
    public final EObject entryRuleConditionalAndExpression() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleConditionalAndExpression = null;


        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3032:2: (iv_ruleConditionalAndExpression= ruleConditionalAndExpression EOF )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3033:2: iv_ruleConditionalAndExpression= ruleConditionalAndExpression EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getConditionalAndExpressionRule()); 
            }
            pushFollow(FOLLOW_ruleConditionalAndExpression_in_entryRuleConditionalAndExpression7117);
            iv_ruleConditionalAndExpression=ruleConditionalAndExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleConditionalAndExpression; 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRuleConditionalAndExpression7127); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleConditionalAndExpression"


    // $ANTLR start "ruleConditionalAndExpression"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3040:1: ruleConditionalAndExpression returns [EObject current=null] : ( ( (lv_exclusiveorexpression_0_0= ruleExclusiveOrExpression ) ) (otherlv_1= 'and' ( (lv_exclusiveorexpression_2_0= ruleExclusiveOrExpression ) ) )* ) ;
    public final EObject ruleConditionalAndExpression() throws RecognitionException {
        EObject current = null;

        Token otherlv_1=null;
        EObject lv_exclusiveorexpression_0_0 = null;

        EObject lv_exclusiveorexpression_2_0 = null;


         enterRule(); 
            
        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3043:28: ( ( ( (lv_exclusiveorexpression_0_0= ruleExclusiveOrExpression ) ) (otherlv_1= 'and' ( (lv_exclusiveorexpression_2_0= ruleExclusiveOrExpression ) ) )* ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3044:1: ( ( (lv_exclusiveorexpression_0_0= ruleExclusiveOrExpression ) ) (otherlv_1= 'and' ( (lv_exclusiveorexpression_2_0= ruleExclusiveOrExpression ) ) )* )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3044:1: ( ( (lv_exclusiveorexpression_0_0= ruleExclusiveOrExpression ) ) (otherlv_1= 'and' ( (lv_exclusiveorexpression_2_0= ruleExclusiveOrExpression ) ) )* )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3044:2: ( (lv_exclusiveorexpression_0_0= ruleExclusiveOrExpression ) ) (otherlv_1= 'and' ( (lv_exclusiveorexpression_2_0= ruleExclusiveOrExpression ) ) )*
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3044:2: ( (lv_exclusiveorexpression_0_0= ruleExclusiveOrExpression ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3045:1: (lv_exclusiveorexpression_0_0= ruleExclusiveOrExpression )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3045:1: (lv_exclusiveorexpression_0_0= ruleExclusiveOrExpression )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3046:3: lv_exclusiveorexpression_0_0= ruleExclusiveOrExpression
            {
            if ( state.backtracking==0 ) {
               
              	        newCompositeNode(grammarAccess.getConditionalAndExpressionAccess().getExclusiveorexpressionExclusiveOrExpressionParserRuleCall_0_0()); 
              	    
            }
            pushFollow(FOLLOW_ruleExclusiveOrExpression_in_ruleConditionalAndExpression7173);
            lv_exclusiveorexpression_0_0=ruleExclusiveOrExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              	        if (current==null) {
              	            current = createModelElementForParent(grammarAccess.getConditionalAndExpressionRule());
              	        }
                     		add(
                     			current, 
                     			"exclusiveorexpression",
                      		lv_exclusiveorexpression_0_0, 
                      		"ExclusiveOrExpression");
              	        afterParserOrEnumRuleCall();
              	    
            }

            }


            }

            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3062:2: (otherlv_1= 'and' ( (lv_exclusiveorexpression_2_0= ruleExclusiveOrExpression ) ) )*
            loop46:
            do {
                int alt46=2;
                int LA46_0 = input.LA(1);

                if ( (LA46_0==77) ) {
                    alt46=1;
                }


                switch (alt46) {
            	case 1 :
            	    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3062:4: otherlv_1= 'and' ( (lv_exclusiveorexpression_2_0= ruleExclusiveOrExpression ) )
            	    {
            	    otherlv_1=(Token)match(input,77,FOLLOW_77_in_ruleConditionalAndExpression7186); if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	          	newLeafNode(otherlv_1, grammarAccess.getConditionalAndExpressionAccess().getAndKeyword_1_0());
            	          
            	    }
            	    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3066:1: ( (lv_exclusiveorexpression_2_0= ruleExclusiveOrExpression ) )
            	    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3067:1: (lv_exclusiveorexpression_2_0= ruleExclusiveOrExpression )
            	    {
            	    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3067:1: (lv_exclusiveorexpression_2_0= ruleExclusiveOrExpression )
            	    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3068:3: lv_exclusiveorexpression_2_0= ruleExclusiveOrExpression
            	    {
            	    if ( state.backtracking==0 ) {
            	       
            	      	        newCompositeNode(grammarAccess.getConditionalAndExpressionAccess().getExclusiveorexpressionExclusiveOrExpressionParserRuleCall_1_1_0()); 
            	      	    
            	    }
            	    pushFollow(FOLLOW_ruleExclusiveOrExpression_in_ruleConditionalAndExpression7207);
            	    lv_exclusiveorexpression_2_0=ruleExclusiveOrExpression();

            	    state._fsp--;
            	    if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      	        if (current==null) {
            	      	            current = createModelElementForParent(grammarAccess.getConditionalAndExpressionRule());
            	      	        }
            	             		add(
            	             			current, 
            	             			"exclusiveorexpression",
            	              		lv_exclusiveorexpression_2_0, 
            	              		"ExclusiveOrExpression");
            	      	        afterParserOrEnumRuleCall();
            	      	    
            	    }

            	    }


            	    }


            	    }
            	    break;

            	default :
            	    break loop46;
                }
            } while (true);


            }


            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleConditionalAndExpression"


    // $ANTLR start "entryRuleExclusiveOrExpression"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3092:1: entryRuleExclusiveOrExpression returns [EObject current=null] : iv_ruleExclusiveOrExpression= ruleExclusiveOrExpression EOF ;
    public final EObject entryRuleExclusiveOrExpression() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleExclusiveOrExpression = null;


        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3093:2: (iv_ruleExclusiveOrExpression= ruleExclusiveOrExpression EOF )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3094:2: iv_ruleExclusiveOrExpression= ruleExclusiveOrExpression EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getExclusiveOrExpressionRule()); 
            }
            pushFollow(FOLLOW_ruleExclusiveOrExpression_in_entryRuleExclusiveOrExpression7245);
            iv_ruleExclusiveOrExpression=ruleExclusiveOrExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleExclusiveOrExpression; 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRuleExclusiveOrExpression7255); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleExclusiveOrExpression"


    // $ANTLR start "ruleExclusiveOrExpression"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3101:1: ruleExclusiveOrExpression returns [EObject current=null] : ( ( (lv_equalityexpression_0_0= ruleEqualityExpression ) ) (otherlv_1= 'xor' ( (lv_equalityexpression_2_0= ruleEqualityExpression ) ) )* ) ;
    public final EObject ruleExclusiveOrExpression() throws RecognitionException {
        EObject current = null;

        Token otherlv_1=null;
        EObject lv_equalityexpression_0_0 = null;

        EObject lv_equalityexpression_2_0 = null;


         enterRule(); 
            
        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3104:28: ( ( ( (lv_equalityexpression_0_0= ruleEqualityExpression ) ) (otherlv_1= 'xor' ( (lv_equalityexpression_2_0= ruleEqualityExpression ) ) )* ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3105:1: ( ( (lv_equalityexpression_0_0= ruleEqualityExpression ) ) (otherlv_1= 'xor' ( (lv_equalityexpression_2_0= ruleEqualityExpression ) ) )* )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3105:1: ( ( (lv_equalityexpression_0_0= ruleEqualityExpression ) ) (otherlv_1= 'xor' ( (lv_equalityexpression_2_0= ruleEqualityExpression ) ) )* )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3105:2: ( (lv_equalityexpression_0_0= ruleEqualityExpression ) ) (otherlv_1= 'xor' ( (lv_equalityexpression_2_0= ruleEqualityExpression ) ) )*
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3105:2: ( (lv_equalityexpression_0_0= ruleEqualityExpression ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3106:1: (lv_equalityexpression_0_0= ruleEqualityExpression )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3106:1: (lv_equalityexpression_0_0= ruleEqualityExpression )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3107:3: lv_equalityexpression_0_0= ruleEqualityExpression
            {
            if ( state.backtracking==0 ) {
               
              	        newCompositeNode(grammarAccess.getExclusiveOrExpressionAccess().getEqualityexpressionEqualityExpressionParserRuleCall_0_0()); 
              	    
            }
            pushFollow(FOLLOW_ruleEqualityExpression_in_ruleExclusiveOrExpression7301);
            lv_equalityexpression_0_0=ruleEqualityExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              	        if (current==null) {
              	            current = createModelElementForParent(grammarAccess.getExclusiveOrExpressionRule());
              	        }
                     		add(
                     			current, 
                     			"equalityexpression",
                      		lv_equalityexpression_0_0, 
                      		"EqualityExpression");
              	        afterParserOrEnumRuleCall();
              	    
            }

            }


            }

            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3123:2: (otherlv_1= 'xor' ( (lv_equalityexpression_2_0= ruleEqualityExpression ) ) )*
            loop47:
            do {
                int alt47=2;
                int LA47_0 = input.LA(1);

                if ( (LA47_0==78) ) {
                    alt47=1;
                }


                switch (alt47) {
            	case 1 :
            	    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3123:4: otherlv_1= 'xor' ( (lv_equalityexpression_2_0= ruleEqualityExpression ) )
            	    {
            	    otherlv_1=(Token)match(input,78,FOLLOW_78_in_ruleExclusiveOrExpression7314); if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	          	newLeafNode(otherlv_1, grammarAccess.getExclusiveOrExpressionAccess().getXorKeyword_1_0());
            	          
            	    }
            	    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3127:1: ( (lv_equalityexpression_2_0= ruleEqualityExpression ) )
            	    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3128:1: (lv_equalityexpression_2_0= ruleEqualityExpression )
            	    {
            	    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3128:1: (lv_equalityexpression_2_0= ruleEqualityExpression )
            	    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3129:3: lv_equalityexpression_2_0= ruleEqualityExpression
            	    {
            	    if ( state.backtracking==0 ) {
            	       
            	      	        newCompositeNode(grammarAccess.getExclusiveOrExpressionAccess().getEqualityexpressionEqualityExpressionParserRuleCall_1_1_0()); 
            	      	    
            	    }
            	    pushFollow(FOLLOW_ruleEqualityExpression_in_ruleExclusiveOrExpression7335);
            	    lv_equalityexpression_2_0=ruleEqualityExpression();

            	    state._fsp--;
            	    if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      	        if (current==null) {
            	      	            current = createModelElementForParent(grammarAccess.getExclusiveOrExpressionRule());
            	      	        }
            	             		add(
            	             			current, 
            	             			"equalityexpression",
            	              		lv_equalityexpression_2_0, 
            	              		"EqualityExpression");
            	      	        afterParserOrEnumRuleCall();
            	      	    
            	    }

            	    }


            	    }


            	    }
            	    break;

            	default :
            	    break loop47;
                }
            } while (true);


            }


            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleExclusiveOrExpression"


    // $ANTLR start "entryRuleEqualityExpression"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3153:1: entryRuleEqualityExpression returns [EObject current=null] : iv_ruleEqualityExpression= ruleEqualityExpression EOF ;
    public final EObject entryRuleEqualityExpression() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleEqualityExpression = null;


        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3154:2: (iv_ruleEqualityExpression= ruleEqualityExpression EOF )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3155:2: iv_ruleEqualityExpression= ruleEqualityExpression EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getEqualityExpressionRule()); 
            }
            pushFollow(FOLLOW_ruleEqualityExpression_in_entryRuleEqualityExpression7373);
            iv_ruleEqualityExpression=ruleEqualityExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleEqualityExpression; 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRuleEqualityExpression7383); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleEqualityExpression"


    // $ANTLR start "ruleEqualityExpression"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3162:1: ruleEqualityExpression returns [EObject current=null] : ( ( (lv_instanceofexpression_0_0= ruleInstanceOfExpression ) ) ( (otherlv_1= '==' | otherlv_2= '!=' ) ( (lv_instanceofexpression_3_0= ruleInstanceOfExpression ) ) )* ) ;
    public final EObject ruleEqualityExpression() throws RecognitionException {
        EObject current = null;

        Token otherlv_1=null;
        Token otherlv_2=null;
        EObject lv_instanceofexpression_0_0 = null;

        EObject lv_instanceofexpression_3_0 = null;


         enterRule(); 
            
        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3165:28: ( ( ( (lv_instanceofexpression_0_0= ruleInstanceOfExpression ) ) ( (otherlv_1= '==' | otherlv_2= '!=' ) ( (lv_instanceofexpression_3_0= ruleInstanceOfExpression ) ) )* ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3166:1: ( ( (lv_instanceofexpression_0_0= ruleInstanceOfExpression ) ) ( (otherlv_1= '==' | otherlv_2= '!=' ) ( (lv_instanceofexpression_3_0= ruleInstanceOfExpression ) ) )* )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3166:1: ( ( (lv_instanceofexpression_0_0= ruleInstanceOfExpression ) ) ( (otherlv_1= '==' | otherlv_2= '!=' ) ( (lv_instanceofexpression_3_0= ruleInstanceOfExpression ) ) )* )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3166:2: ( (lv_instanceofexpression_0_0= ruleInstanceOfExpression ) ) ( (otherlv_1= '==' | otherlv_2= '!=' ) ( (lv_instanceofexpression_3_0= ruleInstanceOfExpression ) ) )*
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3166:2: ( (lv_instanceofexpression_0_0= ruleInstanceOfExpression ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3167:1: (lv_instanceofexpression_0_0= ruleInstanceOfExpression )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3167:1: (lv_instanceofexpression_0_0= ruleInstanceOfExpression )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3168:3: lv_instanceofexpression_0_0= ruleInstanceOfExpression
            {
            if ( state.backtracking==0 ) {
               
              	        newCompositeNode(grammarAccess.getEqualityExpressionAccess().getInstanceofexpressionInstanceOfExpressionParserRuleCall_0_0()); 
              	    
            }
            pushFollow(FOLLOW_ruleInstanceOfExpression_in_ruleEqualityExpression7429);
            lv_instanceofexpression_0_0=ruleInstanceOfExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              	        if (current==null) {
              	            current = createModelElementForParent(grammarAccess.getEqualityExpressionRule());
              	        }
                     		add(
                     			current, 
                     			"instanceofexpression",
                      		lv_instanceofexpression_0_0, 
                      		"InstanceOfExpression");
              	        afterParserOrEnumRuleCall();
              	    
            }

            }


            }

            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3184:2: ( (otherlv_1= '==' | otherlv_2= '!=' ) ( (lv_instanceofexpression_3_0= ruleInstanceOfExpression ) ) )*
            loop49:
            do {
                int alt49=2;
                int LA49_0 = input.LA(1);

                if ( ((LA49_0>=79 && LA49_0<=80)) ) {
                    alt49=1;
                }


                switch (alt49) {
            	case 1 :
            	    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3184:3: (otherlv_1= '==' | otherlv_2= '!=' ) ( (lv_instanceofexpression_3_0= ruleInstanceOfExpression ) )
            	    {
            	    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3184:3: (otherlv_1= '==' | otherlv_2= '!=' )
            	    int alt48=2;
            	    int LA48_0 = input.LA(1);

            	    if ( (LA48_0==79) ) {
            	        alt48=1;
            	    }
            	    else if ( (LA48_0==80) ) {
            	        alt48=2;
            	    }
            	    else {
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        NoViableAltException nvae =
            	            new NoViableAltException("", 48, 0, input);

            	        throw nvae;
            	    }
            	    switch (alt48) {
            	        case 1 :
            	            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3184:5: otherlv_1= '=='
            	            {
            	            otherlv_1=(Token)match(input,79,FOLLOW_79_in_ruleEqualityExpression7443); if (state.failed) return current;
            	            if ( state.backtracking==0 ) {

            	                  	newLeafNode(otherlv_1, grammarAccess.getEqualityExpressionAccess().getEqualsSignEqualsSignKeyword_1_0_0());
            	                  
            	            }

            	            }
            	            break;
            	        case 2 :
            	            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3189:7: otherlv_2= '!='
            	            {
            	            otherlv_2=(Token)match(input,80,FOLLOW_80_in_ruleEqualityExpression7461); if (state.failed) return current;
            	            if ( state.backtracking==0 ) {

            	                  	newLeafNode(otherlv_2, grammarAccess.getEqualityExpressionAccess().getExclamationMarkEqualsSignKeyword_1_0_1());
            	                  
            	            }

            	            }
            	            break;

            	    }

            	    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3193:2: ( (lv_instanceofexpression_3_0= ruleInstanceOfExpression ) )
            	    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3194:1: (lv_instanceofexpression_3_0= ruleInstanceOfExpression )
            	    {
            	    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3194:1: (lv_instanceofexpression_3_0= ruleInstanceOfExpression )
            	    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3195:3: lv_instanceofexpression_3_0= ruleInstanceOfExpression
            	    {
            	    if ( state.backtracking==0 ) {
            	       
            	      	        newCompositeNode(grammarAccess.getEqualityExpressionAccess().getInstanceofexpressionInstanceOfExpressionParserRuleCall_1_1_0()); 
            	      	    
            	    }
            	    pushFollow(FOLLOW_ruleInstanceOfExpression_in_ruleEqualityExpression7483);
            	    lv_instanceofexpression_3_0=ruleInstanceOfExpression();

            	    state._fsp--;
            	    if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      	        if (current==null) {
            	      	            current = createModelElementForParent(grammarAccess.getEqualityExpressionRule());
            	      	        }
            	             		add(
            	             			current, 
            	             			"instanceofexpression",
            	              		lv_instanceofexpression_3_0, 
            	              		"InstanceOfExpression");
            	      	        afterParserOrEnumRuleCall();
            	      	    
            	    }

            	    }


            	    }


            	    }
            	    break;

            	default :
            	    break loop49;
                }
            } while (true);


            }


            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleEqualityExpression"


    // $ANTLR start "entryRuleInstanceOfExpression"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3219:1: entryRuleInstanceOfExpression returns [EObject current=null] : iv_ruleInstanceOfExpression= ruleInstanceOfExpression EOF ;
    public final EObject entryRuleInstanceOfExpression() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleInstanceOfExpression = null;


        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3220:2: (iv_ruleInstanceOfExpression= ruleInstanceOfExpression EOF )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3221:2: iv_ruleInstanceOfExpression= ruleInstanceOfExpression EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getInstanceOfExpressionRule()); 
            }
            pushFollow(FOLLOW_ruleInstanceOfExpression_in_entryRuleInstanceOfExpression7521);
            iv_ruleInstanceOfExpression=ruleInstanceOfExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleInstanceOfExpression; 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRuleInstanceOfExpression7531); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleInstanceOfExpression"


    // $ANTLR start "ruleInstanceOfExpression"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3228:1: ruleInstanceOfExpression returns [EObject current=null] : ( ( (lv_left_0_0= ruleRelationalExpression ) ) (otherlv_1= 'instanceof' ( (lv_type_2_0= ruleUseType ) ) )? ) ;
    public final EObject ruleInstanceOfExpression() throws RecognitionException {
        EObject current = null;

        Token otherlv_1=null;
        EObject lv_left_0_0 = null;

        EObject lv_type_2_0 = null;


         enterRule(); 
            
        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3231:28: ( ( ( (lv_left_0_0= ruleRelationalExpression ) ) (otherlv_1= 'instanceof' ( (lv_type_2_0= ruleUseType ) ) )? ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3232:1: ( ( (lv_left_0_0= ruleRelationalExpression ) ) (otherlv_1= 'instanceof' ( (lv_type_2_0= ruleUseType ) ) )? )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3232:1: ( ( (lv_left_0_0= ruleRelationalExpression ) ) (otherlv_1= 'instanceof' ( (lv_type_2_0= ruleUseType ) ) )? )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3232:2: ( (lv_left_0_0= ruleRelationalExpression ) ) (otherlv_1= 'instanceof' ( (lv_type_2_0= ruleUseType ) ) )?
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3232:2: ( (lv_left_0_0= ruleRelationalExpression ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3233:1: (lv_left_0_0= ruleRelationalExpression )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3233:1: (lv_left_0_0= ruleRelationalExpression )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3234:3: lv_left_0_0= ruleRelationalExpression
            {
            if ( state.backtracking==0 ) {
               
              	        newCompositeNode(grammarAccess.getInstanceOfExpressionAccess().getLeftRelationalExpressionParserRuleCall_0_0()); 
              	    
            }
            pushFollow(FOLLOW_ruleRelationalExpression_in_ruleInstanceOfExpression7577);
            lv_left_0_0=ruleRelationalExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              	        if (current==null) {
              	            current = createModelElementForParent(grammarAccess.getInstanceOfExpressionRule());
              	        }
                     		set(
                     			current, 
                     			"left",
                      		lv_left_0_0, 
                      		"RelationalExpression");
              	        afterParserOrEnumRuleCall();
              	    
            }

            }


            }

            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3250:2: (otherlv_1= 'instanceof' ( (lv_type_2_0= ruleUseType ) ) )?
            int alt50=2;
            int LA50_0 = input.LA(1);

            if ( (LA50_0==81) ) {
                alt50=1;
            }
            switch (alt50) {
                case 1 :
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3250:4: otherlv_1= 'instanceof' ( (lv_type_2_0= ruleUseType ) )
                    {
                    otherlv_1=(Token)match(input,81,FOLLOW_81_in_ruleInstanceOfExpression7590); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                          	newLeafNode(otherlv_1, grammarAccess.getInstanceOfExpressionAccess().getInstanceofKeyword_1_0());
                          
                    }
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3254:1: ( (lv_type_2_0= ruleUseType ) )
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3255:1: (lv_type_2_0= ruleUseType )
                    {
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3255:1: (lv_type_2_0= ruleUseType )
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3256:3: lv_type_2_0= ruleUseType
                    {
                    if ( state.backtracking==0 ) {
                       
                      	        newCompositeNode(grammarAccess.getInstanceOfExpressionAccess().getTypeUseTypeParserRuleCall_1_1_0()); 
                      	    
                    }
                    pushFollow(FOLLOW_ruleUseType_in_ruleInstanceOfExpression7611);
                    lv_type_2_0=ruleUseType();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      	        if (current==null) {
                      	            current = createModelElementForParent(grammarAccess.getInstanceOfExpressionRule());
                      	        }
                             		set(
                             			current, 
                             			"type",
                              		lv_type_2_0, 
                              		"UseType");
                      	        afterParserOrEnumRuleCall();
                      	    
                    }

                    }


                    }


                    }
                    break;

            }


            }


            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleInstanceOfExpression"


    // $ANTLR start "entryRuleRelationalExpression"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3280:1: entryRuleRelationalExpression returns [EObject current=null] : iv_ruleRelationalExpression= ruleRelationalExpression EOF ;
    public final EObject entryRuleRelationalExpression() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleRelationalExpression = null;


        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3281:2: (iv_ruleRelationalExpression= ruleRelationalExpression EOF )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3282:2: iv_ruleRelationalExpression= ruleRelationalExpression EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getRelationalExpressionRule()); 
            }
            pushFollow(FOLLOW_ruleRelationalExpression_in_entryRuleRelationalExpression7649);
            iv_ruleRelationalExpression=ruleRelationalExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleRelationalExpression; 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRuleRelationalExpression7659); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleRelationalExpression"


    // $ANTLR start "ruleRelationalExpression"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3289:1: ruleRelationalExpression returns [EObject current=null] : ( ( (lv_additiveexpression_0_0= ruleAdditiveExpression ) ) ( ( (lv_relationalop_1_0= ruleRelationalOp ) ) ( (lv_additiveexpression_2_0= ruleAdditiveExpression ) ) )* ) ;
    public final EObject ruleRelationalExpression() throws RecognitionException {
        EObject current = null;

        EObject lv_additiveexpression_0_0 = null;

        AntlrDatatypeRuleToken lv_relationalop_1_0 = null;

        EObject lv_additiveexpression_2_0 = null;


         enterRule(); 
            
        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3292:28: ( ( ( (lv_additiveexpression_0_0= ruleAdditiveExpression ) ) ( ( (lv_relationalop_1_0= ruleRelationalOp ) ) ( (lv_additiveexpression_2_0= ruleAdditiveExpression ) ) )* ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3293:1: ( ( (lv_additiveexpression_0_0= ruleAdditiveExpression ) ) ( ( (lv_relationalop_1_0= ruleRelationalOp ) ) ( (lv_additiveexpression_2_0= ruleAdditiveExpression ) ) )* )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3293:1: ( ( (lv_additiveexpression_0_0= ruleAdditiveExpression ) ) ( ( (lv_relationalop_1_0= ruleRelationalOp ) ) ( (lv_additiveexpression_2_0= ruleAdditiveExpression ) ) )* )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3293:2: ( (lv_additiveexpression_0_0= ruleAdditiveExpression ) ) ( ( (lv_relationalop_1_0= ruleRelationalOp ) ) ( (lv_additiveexpression_2_0= ruleAdditiveExpression ) ) )*
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3293:2: ( (lv_additiveexpression_0_0= ruleAdditiveExpression ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3294:1: (lv_additiveexpression_0_0= ruleAdditiveExpression )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3294:1: (lv_additiveexpression_0_0= ruleAdditiveExpression )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3295:3: lv_additiveexpression_0_0= ruleAdditiveExpression
            {
            if ( state.backtracking==0 ) {
               
              	        newCompositeNode(grammarAccess.getRelationalExpressionAccess().getAdditiveexpressionAdditiveExpressionParserRuleCall_0_0()); 
              	    
            }
            pushFollow(FOLLOW_ruleAdditiveExpression_in_ruleRelationalExpression7705);
            lv_additiveexpression_0_0=ruleAdditiveExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              	        if (current==null) {
              	            current = createModelElementForParent(grammarAccess.getRelationalExpressionRule());
              	        }
                     		add(
                     			current, 
                     			"additiveexpression",
                      		lv_additiveexpression_0_0, 
                      		"AdditiveExpression");
              	        afterParserOrEnumRuleCall();
              	    
            }

            }


            }

            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3311:2: ( ( (lv_relationalop_1_0= ruleRelationalOp ) ) ( (lv_additiveexpression_2_0= ruleAdditiveExpression ) ) )*
            loop51:
            do {
                int alt51=2;
                int LA51_0 = input.LA(1);

                if ( ((LA51_0>=82 && LA51_0<=88)) ) {
                    alt51=1;
                }


                switch (alt51) {
            	case 1 :
            	    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3311:3: ( (lv_relationalop_1_0= ruleRelationalOp ) ) ( (lv_additiveexpression_2_0= ruleAdditiveExpression ) )
            	    {
            	    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3311:3: ( (lv_relationalop_1_0= ruleRelationalOp ) )
            	    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3312:1: (lv_relationalop_1_0= ruleRelationalOp )
            	    {
            	    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3312:1: (lv_relationalop_1_0= ruleRelationalOp )
            	    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3313:3: lv_relationalop_1_0= ruleRelationalOp
            	    {
            	    if ( state.backtracking==0 ) {
            	       
            	      	        newCompositeNode(grammarAccess.getRelationalExpressionAccess().getRelationalopRelationalOpParserRuleCall_1_0_0()); 
            	      	    
            	    }
            	    pushFollow(FOLLOW_ruleRelationalOp_in_ruleRelationalExpression7727);
            	    lv_relationalop_1_0=ruleRelationalOp();

            	    state._fsp--;
            	    if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      	        if (current==null) {
            	      	            current = createModelElementForParent(grammarAccess.getRelationalExpressionRule());
            	      	        }
            	             		add(
            	             			current, 
            	             			"relationalop",
            	              		lv_relationalop_1_0, 
            	              		"RelationalOp");
            	      	        afterParserOrEnumRuleCall();
            	      	    
            	    }

            	    }


            	    }

            	    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3329:2: ( (lv_additiveexpression_2_0= ruleAdditiveExpression ) )
            	    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3330:1: (lv_additiveexpression_2_0= ruleAdditiveExpression )
            	    {
            	    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3330:1: (lv_additiveexpression_2_0= ruleAdditiveExpression )
            	    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3331:3: lv_additiveexpression_2_0= ruleAdditiveExpression
            	    {
            	    if ( state.backtracking==0 ) {
            	       
            	      	        newCompositeNode(grammarAccess.getRelationalExpressionAccess().getAdditiveexpressionAdditiveExpressionParserRuleCall_1_1_0()); 
            	      	    
            	    }
            	    pushFollow(FOLLOW_ruleAdditiveExpression_in_ruleRelationalExpression7748);
            	    lv_additiveexpression_2_0=ruleAdditiveExpression();

            	    state._fsp--;
            	    if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      	        if (current==null) {
            	      	            current = createModelElementForParent(grammarAccess.getRelationalExpressionRule());
            	      	        }
            	             		add(
            	             			current, 
            	             			"additiveexpression",
            	              		lv_additiveexpression_2_0, 
            	              		"AdditiveExpression");
            	      	        afterParserOrEnumRuleCall();
            	      	    
            	    }

            	    }


            	    }


            	    }
            	    break;

            	default :
            	    break loop51;
                }
            } while (true);


            }


            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleRelationalExpression"


    // $ANTLR start "entryRuleRelationalOp"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3355:1: entryRuleRelationalOp returns [String current=null] : iv_ruleRelationalOp= ruleRelationalOp EOF ;
    public final String entryRuleRelationalOp() throws RecognitionException {
        String current = null;

        AntlrDatatypeRuleToken iv_ruleRelationalOp = null;


        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3356:2: (iv_ruleRelationalOp= ruleRelationalOp EOF )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3357:2: iv_ruleRelationalOp= ruleRelationalOp EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getRelationalOpRule()); 
            }
            pushFollow(FOLLOW_ruleRelationalOp_in_entryRuleRelationalOp7787);
            iv_ruleRelationalOp=ruleRelationalOp();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleRelationalOp.getText(); 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRuleRelationalOp7798); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleRelationalOp"


    // $ANTLR start "ruleRelationalOp"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3364:1: ruleRelationalOp returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : (kw= '<' | kw= '<=' | kw= '>' | kw= '>=' | kw= 'in' | kw= '||' | kw= '~' ) ;
    public final AntlrDatatypeRuleToken ruleRelationalOp() throws RecognitionException {
        AntlrDatatypeRuleToken current = new AntlrDatatypeRuleToken();

        Token kw=null;

         enterRule(); 
            
        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3367:28: ( (kw= '<' | kw= '<=' | kw= '>' | kw= '>=' | kw= 'in' | kw= '||' | kw= '~' ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3368:1: (kw= '<' | kw= '<=' | kw= '>' | kw= '>=' | kw= 'in' | kw= '||' | kw= '~' )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3368:1: (kw= '<' | kw= '<=' | kw= '>' | kw= '>=' | kw= 'in' | kw= '||' | kw= '~' )
            int alt52=7;
            switch ( input.LA(1) ) {
            case 82:
                {
                alt52=1;
                }
                break;
            case 83:
                {
                alt52=2;
                }
                break;
            case 84:
                {
                alt52=3;
                }
                break;
            case 85:
                {
                alt52=4;
                }
                break;
            case 86:
                {
                alt52=5;
                }
                break;
            case 87:
                {
                alt52=6;
                }
                break;
            case 88:
                {
                alt52=7;
                }
                break;
            default:
                if (state.backtracking>0) {state.failed=true; return current;}
                NoViableAltException nvae =
                    new NoViableAltException("", 52, 0, input);

                throw nvae;
            }

            switch (alt52) {
                case 1 :
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3369:2: kw= '<'
                    {
                    kw=(Token)match(input,82,FOLLOW_82_in_ruleRelationalOp7836); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                              current.merge(kw);
                              newLeafNode(kw, grammarAccess.getRelationalOpAccess().getLessThanSignKeyword_0()); 
                          
                    }

                    }
                    break;
                case 2 :
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3376:2: kw= '<='
                    {
                    kw=(Token)match(input,83,FOLLOW_83_in_ruleRelationalOp7855); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                              current.merge(kw);
                              newLeafNode(kw, grammarAccess.getRelationalOpAccess().getLessThanSignEqualsSignKeyword_1()); 
                          
                    }

                    }
                    break;
                case 3 :
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3383:2: kw= '>'
                    {
                    kw=(Token)match(input,84,FOLLOW_84_in_ruleRelationalOp7874); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                              current.merge(kw);
                              newLeafNode(kw, grammarAccess.getRelationalOpAccess().getGreaterThanSignKeyword_2()); 
                          
                    }

                    }
                    break;
                case 4 :
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3390:2: kw= '>='
                    {
                    kw=(Token)match(input,85,FOLLOW_85_in_ruleRelationalOp7893); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                              current.merge(kw);
                              newLeafNode(kw, grammarAccess.getRelationalOpAccess().getGreaterThanSignEqualsSignKeyword_3()); 
                          
                    }

                    }
                    break;
                case 5 :
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3397:2: kw= 'in'
                    {
                    kw=(Token)match(input,86,FOLLOW_86_in_ruleRelationalOp7912); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                              current.merge(kw);
                              newLeafNode(kw, grammarAccess.getRelationalOpAccess().getInKeyword_4()); 
                          
                    }

                    }
                    break;
                case 6 :
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3404:2: kw= '||'
                    {
                    kw=(Token)match(input,87,FOLLOW_87_in_ruleRelationalOp7931); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                              current.merge(kw);
                              newLeafNode(kw, grammarAccess.getRelationalOpAccess().getVerticalLineVerticalLineKeyword_5()); 
                          
                    }

                    }
                    break;
                case 7 :
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3411:2: kw= '~'
                    {
                    kw=(Token)match(input,88,FOLLOW_88_in_ruleRelationalOp7950); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                              current.merge(kw);
                              newLeafNode(kw, grammarAccess.getRelationalOpAccess().getTildeKeyword_6()); 
                          
                    }

                    }
                    break;

            }


            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleRelationalOp"


    // $ANTLR start "entryRuleAdditiveExpression"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3424:1: entryRuleAdditiveExpression returns [EObject current=null] : iv_ruleAdditiveExpression= ruleAdditiveExpression EOF ;
    public final EObject entryRuleAdditiveExpression() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleAdditiveExpression = null;


        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3425:2: (iv_ruleAdditiveExpression= ruleAdditiveExpression EOF )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3426:2: iv_ruleAdditiveExpression= ruleAdditiveExpression EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getAdditiveExpressionRule()); 
            }
            pushFollow(FOLLOW_ruleAdditiveExpression_in_entryRuleAdditiveExpression7990);
            iv_ruleAdditiveExpression=ruleAdditiveExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleAdditiveExpression; 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRuleAdditiveExpression8000); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleAdditiveExpression"


    // $ANTLR start "ruleAdditiveExpression"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3433:1: ruleAdditiveExpression returns [EObject current=null] : ( ( (lv_multiplicativeexpression_0_0= ruleMultiplicativeExpression ) ) ( (otherlv_1= '+' | otherlv_2= '-' ) ( (lv_multiplicativeexpression_3_0= ruleMultiplicativeExpression ) ) )* ) ;
    public final EObject ruleAdditiveExpression() throws RecognitionException {
        EObject current = null;

        Token otherlv_1=null;
        Token otherlv_2=null;
        EObject lv_multiplicativeexpression_0_0 = null;

        EObject lv_multiplicativeexpression_3_0 = null;


         enterRule(); 
            
        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3436:28: ( ( ( (lv_multiplicativeexpression_0_0= ruleMultiplicativeExpression ) ) ( (otherlv_1= '+' | otherlv_2= '-' ) ( (lv_multiplicativeexpression_3_0= ruleMultiplicativeExpression ) ) )* ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3437:1: ( ( (lv_multiplicativeexpression_0_0= ruleMultiplicativeExpression ) ) ( (otherlv_1= '+' | otherlv_2= '-' ) ( (lv_multiplicativeexpression_3_0= ruleMultiplicativeExpression ) ) )* )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3437:1: ( ( (lv_multiplicativeexpression_0_0= ruleMultiplicativeExpression ) ) ( (otherlv_1= '+' | otherlv_2= '-' ) ( (lv_multiplicativeexpression_3_0= ruleMultiplicativeExpression ) ) )* )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3437:2: ( (lv_multiplicativeexpression_0_0= ruleMultiplicativeExpression ) ) ( (otherlv_1= '+' | otherlv_2= '-' ) ( (lv_multiplicativeexpression_3_0= ruleMultiplicativeExpression ) ) )*
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3437:2: ( (lv_multiplicativeexpression_0_0= ruleMultiplicativeExpression ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3438:1: (lv_multiplicativeexpression_0_0= ruleMultiplicativeExpression )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3438:1: (lv_multiplicativeexpression_0_0= ruleMultiplicativeExpression )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3439:3: lv_multiplicativeexpression_0_0= ruleMultiplicativeExpression
            {
            if ( state.backtracking==0 ) {
               
              	        newCompositeNode(grammarAccess.getAdditiveExpressionAccess().getMultiplicativeexpressionMultiplicativeExpressionParserRuleCall_0_0()); 
              	    
            }
            pushFollow(FOLLOW_ruleMultiplicativeExpression_in_ruleAdditiveExpression8046);
            lv_multiplicativeexpression_0_0=ruleMultiplicativeExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              	        if (current==null) {
              	            current = createModelElementForParent(grammarAccess.getAdditiveExpressionRule());
              	        }
                     		add(
                     			current, 
                     			"multiplicativeexpression",
                      		lv_multiplicativeexpression_0_0, 
                      		"MultiplicativeExpression");
              	        afterParserOrEnumRuleCall();
              	    
            }

            }


            }

            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3455:2: ( (otherlv_1= '+' | otherlv_2= '-' ) ( (lv_multiplicativeexpression_3_0= ruleMultiplicativeExpression ) ) )*
            loop54:
            do {
                int alt54=2;
                int LA54_0 = input.LA(1);

                if ( ((LA54_0>=89 && LA54_0<=90)) ) {
                    alt54=1;
                }


                switch (alt54) {
            	case 1 :
            	    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3455:3: (otherlv_1= '+' | otherlv_2= '-' ) ( (lv_multiplicativeexpression_3_0= ruleMultiplicativeExpression ) )
            	    {
            	    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3455:3: (otherlv_1= '+' | otherlv_2= '-' )
            	    int alt53=2;
            	    int LA53_0 = input.LA(1);

            	    if ( (LA53_0==89) ) {
            	        alt53=1;
            	    }
            	    else if ( (LA53_0==90) ) {
            	        alt53=2;
            	    }
            	    else {
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        NoViableAltException nvae =
            	            new NoViableAltException("", 53, 0, input);

            	        throw nvae;
            	    }
            	    switch (alt53) {
            	        case 1 :
            	            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3455:5: otherlv_1= '+'
            	            {
            	            otherlv_1=(Token)match(input,89,FOLLOW_89_in_ruleAdditiveExpression8060); if (state.failed) return current;
            	            if ( state.backtracking==0 ) {

            	                  	newLeafNode(otherlv_1, grammarAccess.getAdditiveExpressionAccess().getPlusSignKeyword_1_0_0());
            	                  
            	            }

            	            }
            	            break;
            	        case 2 :
            	            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3460:7: otherlv_2= '-'
            	            {
            	            otherlv_2=(Token)match(input,90,FOLLOW_90_in_ruleAdditiveExpression8078); if (state.failed) return current;
            	            if ( state.backtracking==0 ) {

            	                  	newLeafNode(otherlv_2, grammarAccess.getAdditiveExpressionAccess().getHyphenMinusKeyword_1_0_1());
            	                  
            	            }

            	            }
            	            break;

            	    }

            	    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3464:2: ( (lv_multiplicativeexpression_3_0= ruleMultiplicativeExpression ) )
            	    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3465:1: (lv_multiplicativeexpression_3_0= ruleMultiplicativeExpression )
            	    {
            	    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3465:1: (lv_multiplicativeexpression_3_0= ruleMultiplicativeExpression )
            	    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3466:3: lv_multiplicativeexpression_3_0= ruleMultiplicativeExpression
            	    {
            	    if ( state.backtracking==0 ) {
            	       
            	      	        newCompositeNode(grammarAccess.getAdditiveExpressionAccess().getMultiplicativeexpressionMultiplicativeExpressionParserRuleCall_1_1_0()); 
            	      	    
            	    }
            	    pushFollow(FOLLOW_ruleMultiplicativeExpression_in_ruleAdditiveExpression8100);
            	    lv_multiplicativeexpression_3_0=ruleMultiplicativeExpression();

            	    state._fsp--;
            	    if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      	        if (current==null) {
            	      	            current = createModelElementForParent(grammarAccess.getAdditiveExpressionRule());
            	      	        }
            	             		add(
            	             			current, 
            	             			"multiplicativeexpression",
            	              		lv_multiplicativeexpression_3_0, 
            	              		"MultiplicativeExpression");
            	      	        afterParserOrEnumRuleCall();
            	      	    
            	    }

            	    }


            	    }


            	    }
            	    break;

            	default :
            	    break loop54;
                }
            } while (true);


            }


            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleAdditiveExpression"


    // $ANTLR start "entryRuleMultiplicativeExpression"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3490:1: entryRuleMultiplicativeExpression returns [EObject current=null] : iv_ruleMultiplicativeExpression= ruleMultiplicativeExpression EOF ;
    public final EObject entryRuleMultiplicativeExpression() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleMultiplicativeExpression = null;


        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3491:2: (iv_ruleMultiplicativeExpression= ruleMultiplicativeExpression EOF )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3492:2: iv_ruleMultiplicativeExpression= ruleMultiplicativeExpression EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getMultiplicativeExpressionRule()); 
            }
            pushFollow(FOLLOW_ruleMultiplicativeExpression_in_entryRuleMultiplicativeExpression8138);
            iv_ruleMultiplicativeExpression=ruleMultiplicativeExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleMultiplicativeExpression; 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRuleMultiplicativeExpression8148); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleMultiplicativeExpression"


    // $ANTLR start "ruleMultiplicativeExpression"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3499:1: ruleMultiplicativeExpression returns [EObject current=null] : ( ( (lv_unaryexpression_0_0= ruleUnaryExpression ) ) ( (otherlv_1= '*' | otherlv_2= '/' | otherlv_3= '%' ) ( (lv_unaryexpression_4_0= ruleUnaryExpression ) ) )* ) ;
    public final EObject ruleMultiplicativeExpression() throws RecognitionException {
        EObject current = null;

        Token otherlv_1=null;
        Token otherlv_2=null;
        Token otherlv_3=null;
        EObject lv_unaryexpression_0_0 = null;

        EObject lv_unaryexpression_4_0 = null;


         enterRule(); 
            
        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3502:28: ( ( ( (lv_unaryexpression_0_0= ruleUnaryExpression ) ) ( (otherlv_1= '*' | otherlv_2= '/' | otherlv_3= '%' ) ( (lv_unaryexpression_4_0= ruleUnaryExpression ) ) )* ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3503:1: ( ( (lv_unaryexpression_0_0= ruleUnaryExpression ) ) ( (otherlv_1= '*' | otherlv_2= '/' | otherlv_3= '%' ) ( (lv_unaryexpression_4_0= ruleUnaryExpression ) ) )* )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3503:1: ( ( (lv_unaryexpression_0_0= ruleUnaryExpression ) ) ( (otherlv_1= '*' | otherlv_2= '/' | otherlv_3= '%' ) ( (lv_unaryexpression_4_0= ruleUnaryExpression ) ) )* )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3503:2: ( (lv_unaryexpression_0_0= ruleUnaryExpression ) ) ( (otherlv_1= '*' | otherlv_2= '/' | otherlv_3= '%' ) ( (lv_unaryexpression_4_0= ruleUnaryExpression ) ) )*
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3503:2: ( (lv_unaryexpression_0_0= ruleUnaryExpression ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3504:1: (lv_unaryexpression_0_0= ruleUnaryExpression )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3504:1: (lv_unaryexpression_0_0= ruleUnaryExpression )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3505:3: lv_unaryexpression_0_0= ruleUnaryExpression
            {
            if ( state.backtracking==0 ) {
               
              	        newCompositeNode(grammarAccess.getMultiplicativeExpressionAccess().getUnaryexpressionUnaryExpressionParserRuleCall_0_0()); 
              	    
            }
            pushFollow(FOLLOW_ruleUnaryExpression_in_ruleMultiplicativeExpression8194);
            lv_unaryexpression_0_0=ruleUnaryExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              	        if (current==null) {
              	            current = createModelElementForParent(grammarAccess.getMultiplicativeExpressionRule());
              	        }
                     		add(
                     			current, 
                     			"unaryexpression",
                      		lv_unaryexpression_0_0, 
                      		"UnaryExpression");
              	        afterParserOrEnumRuleCall();
              	    
            }

            }


            }

            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3521:2: ( (otherlv_1= '*' | otherlv_2= '/' | otherlv_3= '%' ) ( (lv_unaryexpression_4_0= ruleUnaryExpression ) ) )*
            loop56:
            do {
                int alt56=2;
                int LA56_0 = input.LA(1);

                if ( ((LA56_0>=91 && LA56_0<=93)) ) {
                    alt56=1;
                }


                switch (alt56) {
            	case 1 :
            	    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3521:3: (otherlv_1= '*' | otherlv_2= '/' | otherlv_3= '%' ) ( (lv_unaryexpression_4_0= ruleUnaryExpression ) )
            	    {
            	    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3521:3: (otherlv_1= '*' | otherlv_2= '/' | otherlv_3= '%' )
            	    int alt55=3;
            	    switch ( input.LA(1) ) {
            	    case 91:
            	        {
            	        alt55=1;
            	        }
            	        break;
            	    case 92:
            	        {
            	        alt55=2;
            	        }
            	        break;
            	    case 93:
            	        {
            	        alt55=3;
            	        }
            	        break;
            	    default:
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        NoViableAltException nvae =
            	            new NoViableAltException("", 55, 0, input);

            	        throw nvae;
            	    }

            	    switch (alt55) {
            	        case 1 :
            	            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3521:5: otherlv_1= '*'
            	            {
            	            otherlv_1=(Token)match(input,91,FOLLOW_91_in_ruleMultiplicativeExpression8208); if (state.failed) return current;
            	            if ( state.backtracking==0 ) {

            	                  	newLeafNode(otherlv_1, grammarAccess.getMultiplicativeExpressionAccess().getAsteriskKeyword_1_0_0());
            	                  
            	            }

            	            }
            	            break;
            	        case 2 :
            	            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3526:7: otherlv_2= '/'
            	            {
            	            otherlv_2=(Token)match(input,92,FOLLOW_92_in_ruleMultiplicativeExpression8226); if (state.failed) return current;
            	            if ( state.backtracking==0 ) {

            	                  	newLeafNode(otherlv_2, grammarAccess.getMultiplicativeExpressionAccess().getSolidusKeyword_1_0_1());
            	                  
            	            }

            	            }
            	            break;
            	        case 3 :
            	            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3531:7: otherlv_3= '%'
            	            {
            	            otherlv_3=(Token)match(input,93,FOLLOW_93_in_ruleMultiplicativeExpression8244); if (state.failed) return current;
            	            if ( state.backtracking==0 ) {

            	                  	newLeafNode(otherlv_3, grammarAccess.getMultiplicativeExpressionAccess().getPercentSignKeyword_1_0_2());
            	                  
            	            }

            	            }
            	            break;

            	    }

            	    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3535:2: ( (lv_unaryexpression_4_0= ruleUnaryExpression ) )
            	    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3536:1: (lv_unaryexpression_4_0= ruleUnaryExpression )
            	    {
            	    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3536:1: (lv_unaryexpression_4_0= ruleUnaryExpression )
            	    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3537:3: lv_unaryexpression_4_0= ruleUnaryExpression
            	    {
            	    if ( state.backtracking==0 ) {
            	       
            	      	        newCompositeNode(grammarAccess.getMultiplicativeExpressionAccess().getUnaryexpressionUnaryExpressionParserRuleCall_1_1_0()); 
            	      	    
            	    }
            	    pushFollow(FOLLOW_ruleUnaryExpression_in_ruleMultiplicativeExpression8266);
            	    lv_unaryexpression_4_0=ruleUnaryExpression();

            	    state._fsp--;
            	    if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      	        if (current==null) {
            	      	            current = createModelElementForParent(grammarAccess.getMultiplicativeExpressionRule());
            	      	        }
            	             		add(
            	             			current, 
            	             			"unaryexpression",
            	              		lv_unaryexpression_4_0, 
            	              		"UnaryExpression");
            	      	        afterParserOrEnumRuleCall();
            	      	    
            	    }

            	    }


            	    }


            	    }
            	    break;

            	default :
            	    break loop56;
                }
            } while (true);


            }


            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleMultiplicativeExpression"


    // $ANTLR start "entryRuleUnaryExpression"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3561:1: entryRuleUnaryExpression returns [EObject current=null] : iv_ruleUnaryExpression= ruleUnaryExpression EOF ;
    public final EObject entryRuleUnaryExpression() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleUnaryExpression = null;


        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3562:2: (iv_ruleUnaryExpression= ruleUnaryExpression EOF )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3563:2: iv_ruleUnaryExpression= ruleUnaryExpression EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getUnaryExpressionRule()); 
            }
            pushFollow(FOLLOW_ruleUnaryExpression_in_entryRuleUnaryExpression8304);
            iv_ruleUnaryExpression=ruleUnaryExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleUnaryExpression; 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRuleUnaryExpression8314); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleUnaryExpression"


    // $ANTLR start "ruleUnaryExpression"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3570:1: ruleUnaryExpression returns [EObject current=null] : ( (otherlv_0= '+' this_UnaryExpression_1= ruleUnaryExpression ) | (otherlv_2= '-' this_UnaryExpression_3= ruleUnaryExpression ) | (otherlv_4= '++' this_UnaryExpression_5= ruleUnaryExpression ) | (otherlv_6= '--' this_UnaryExpression_7= ruleUnaryExpression ) | (otherlv_8= '[' ( (lv_from_9_0= ruleExpression ) ) otherlv_10= ',' ( (lv_to_11_0= ruleExpression ) ) otherlv_12= ']' ) | this_UnaryExpressionNotPlusMinus_13= ruleUnaryExpressionNotPlusMinus ) ;
    public final EObject ruleUnaryExpression() throws RecognitionException {
        EObject current = null;

        Token otherlv_0=null;
        Token otherlv_2=null;
        Token otherlv_4=null;
        Token otherlv_6=null;
        Token otherlv_8=null;
        Token otherlv_10=null;
        Token otherlv_12=null;
        EObject this_UnaryExpression_1 = null;

        EObject this_UnaryExpression_3 = null;

        EObject this_UnaryExpression_5 = null;

        EObject this_UnaryExpression_7 = null;

        EObject lv_from_9_0 = null;

        EObject lv_to_11_0 = null;

        EObject this_UnaryExpressionNotPlusMinus_13 = null;


         enterRule(); 
            
        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3573:28: ( ( (otherlv_0= '+' this_UnaryExpression_1= ruleUnaryExpression ) | (otherlv_2= '-' this_UnaryExpression_3= ruleUnaryExpression ) | (otherlv_4= '++' this_UnaryExpression_5= ruleUnaryExpression ) | (otherlv_6= '--' this_UnaryExpression_7= ruleUnaryExpression ) | (otherlv_8= '[' ( (lv_from_9_0= ruleExpression ) ) otherlv_10= ',' ( (lv_to_11_0= ruleExpression ) ) otherlv_12= ']' ) | this_UnaryExpressionNotPlusMinus_13= ruleUnaryExpressionNotPlusMinus ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3574:1: ( (otherlv_0= '+' this_UnaryExpression_1= ruleUnaryExpression ) | (otherlv_2= '-' this_UnaryExpression_3= ruleUnaryExpression ) | (otherlv_4= '++' this_UnaryExpression_5= ruleUnaryExpression ) | (otherlv_6= '--' this_UnaryExpression_7= ruleUnaryExpression ) | (otherlv_8= '[' ( (lv_from_9_0= ruleExpression ) ) otherlv_10= ',' ( (lv_to_11_0= ruleExpression ) ) otherlv_12= ']' ) | this_UnaryExpressionNotPlusMinus_13= ruleUnaryExpressionNotPlusMinus )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3574:1: ( (otherlv_0= '+' this_UnaryExpression_1= ruleUnaryExpression ) | (otherlv_2= '-' this_UnaryExpression_3= ruleUnaryExpression ) | (otherlv_4= '++' this_UnaryExpression_5= ruleUnaryExpression ) | (otherlv_6= '--' this_UnaryExpression_7= ruleUnaryExpression ) | (otherlv_8= '[' ( (lv_from_9_0= ruleExpression ) ) otherlv_10= ',' ( (lv_to_11_0= ruleExpression ) ) otherlv_12= ']' ) | this_UnaryExpressionNotPlusMinus_13= ruleUnaryExpressionNotPlusMinus )
            int alt57=6;
            switch ( input.LA(1) ) {
            case 89:
                {
                alt57=1;
                }
                break;
            case 90:
                {
                alt57=2;
                }
                break;
            case 94:
                {
                alt57=3;
                }
                break;
            case 95:
                {
                alt57=4;
                }
                break;
            case 57:
                {
                alt57=5;
                }
                break;
            case RULE_ID:
            case RULE_FLOATING_POINT_LITERAL:
            case RULE_CHARACTER_LITERAL:
            case RULE_STRING_LITERAL:
            case RULE_HEX_LITERAL:
            case RULE_OCTAL_LITERAL:
            case RULE_DECIMAL_LITERAL:
            case 52:
            case 96:
            case 97:
            case 102:
            case 103:
            case 104:
            case 105:
            case 106:
            case 109:
            case 110:
            case 111:
            case 112:
            case 113:
            case 114:
            case 115:
            case 116:
            case 117:
            case 118:
            case 119:
            case 120:
            case 121:
            case 122:
            case 123:
            case 124:
            case 125:
            case 126:
            case 127:
            case 128:
            case 129:
            case 130:
            case 131:
            case 132:
            case 133:
            case 134:
            case 135:
            case 136:
            case 137:
            case 145:
                {
                alt57=6;
                }
                break;
            default:
                if (state.backtracking>0) {state.failed=true; return current;}
                NoViableAltException nvae =
                    new NoViableAltException("", 57, 0, input);

                throw nvae;
            }

            switch (alt57) {
                case 1 :
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3574:2: (otherlv_0= '+' this_UnaryExpression_1= ruleUnaryExpression )
                    {
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3574:2: (otherlv_0= '+' this_UnaryExpression_1= ruleUnaryExpression )
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3574:4: otherlv_0= '+' this_UnaryExpression_1= ruleUnaryExpression
                    {
                    otherlv_0=(Token)match(input,89,FOLLOW_89_in_ruleUnaryExpression8352); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                          	newLeafNode(otherlv_0, grammarAccess.getUnaryExpressionAccess().getPlusSignKeyword_0_0());
                          
                    }
                    if ( state.backtracking==0 ) {
                       
                              newCompositeNode(grammarAccess.getUnaryExpressionAccess().getUnaryExpressionParserRuleCall_0_1()); 
                          
                    }
                    pushFollow(FOLLOW_ruleUnaryExpression_in_ruleUnaryExpression8374);
                    this_UnaryExpression_1=ruleUnaryExpression();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {
                       
                              current = this_UnaryExpression_1; 
                              afterParserOrEnumRuleCall();
                          
                    }

                    }


                    }
                    break;
                case 2 :
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3588:6: (otherlv_2= '-' this_UnaryExpression_3= ruleUnaryExpression )
                    {
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3588:6: (otherlv_2= '-' this_UnaryExpression_3= ruleUnaryExpression )
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3588:8: otherlv_2= '-' this_UnaryExpression_3= ruleUnaryExpression
                    {
                    otherlv_2=(Token)match(input,90,FOLLOW_90_in_ruleUnaryExpression8393); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                          	newLeafNode(otherlv_2, grammarAccess.getUnaryExpressionAccess().getHyphenMinusKeyword_1_0());
                          
                    }
                    if ( state.backtracking==0 ) {
                       
                              newCompositeNode(grammarAccess.getUnaryExpressionAccess().getUnaryExpressionParserRuleCall_1_1()); 
                          
                    }
                    pushFollow(FOLLOW_ruleUnaryExpression_in_ruleUnaryExpression8415);
                    this_UnaryExpression_3=ruleUnaryExpression();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {
                       
                              current = this_UnaryExpression_3; 
                              afterParserOrEnumRuleCall();
                          
                    }

                    }


                    }
                    break;
                case 3 :
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3602:6: (otherlv_4= '++' this_UnaryExpression_5= ruleUnaryExpression )
                    {
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3602:6: (otherlv_4= '++' this_UnaryExpression_5= ruleUnaryExpression )
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3602:8: otherlv_4= '++' this_UnaryExpression_5= ruleUnaryExpression
                    {
                    otherlv_4=(Token)match(input,94,FOLLOW_94_in_ruleUnaryExpression8434); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                          	newLeafNode(otherlv_4, grammarAccess.getUnaryExpressionAccess().getPlusSignPlusSignKeyword_2_0());
                          
                    }
                    if ( state.backtracking==0 ) {
                       
                              newCompositeNode(grammarAccess.getUnaryExpressionAccess().getUnaryExpressionParserRuleCall_2_1()); 
                          
                    }
                    pushFollow(FOLLOW_ruleUnaryExpression_in_ruleUnaryExpression8456);
                    this_UnaryExpression_5=ruleUnaryExpression();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {
                       
                              current = this_UnaryExpression_5; 
                              afterParserOrEnumRuleCall();
                          
                    }

                    }


                    }
                    break;
                case 4 :
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3616:6: (otherlv_6= '--' this_UnaryExpression_7= ruleUnaryExpression )
                    {
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3616:6: (otherlv_6= '--' this_UnaryExpression_7= ruleUnaryExpression )
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3616:8: otherlv_6= '--' this_UnaryExpression_7= ruleUnaryExpression
                    {
                    otherlv_6=(Token)match(input,95,FOLLOW_95_in_ruleUnaryExpression8475); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                          	newLeafNode(otherlv_6, grammarAccess.getUnaryExpressionAccess().getHyphenMinusHyphenMinusKeyword_3_0());
                          
                    }
                    if ( state.backtracking==0 ) {
                       
                              newCompositeNode(grammarAccess.getUnaryExpressionAccess().getUnaryExpressionParserRuleCall_3_1()); 
                          
                    }
                    pushFollow(FOLLOW_ruleUnaryExpression_in_ruleUnaryExpression8497);
                    this_UnaryExpression_7=ruleUnaryExpression();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {
                       
                              current = this_UnaryExpression_7; 
                              afterParserOrEnumRuleCall();
                          
                    }

                    }


                    }
                    break;
                case 5 :
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3630:6: (otherlv_8= '[' ( (lv_from_9_0= ruleExpression ) ) otherlv_10= ',' ( (lv_to_11_0= ruleExpression ) ) otherlv_12= ']' )
                    {
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3630:6: (otherlv_8= '[' ( (lv_from_9_0= ruleExpression ) ) otherlv_10= ',' ( (lv_to_11_0= ruleExpression ) ) otherlv_12= ']' )
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3630:8: otherlv_8= '[' ( (lv_from_9_0= ruleExpression ) ) otherlv_10= ',' ( (lv_to_11_0= ruleExpression ) ) otherlv_12= ']'
                    {
                    otherlv_8=(Token)match(input,57,FOLLOW_57_in_ruleUnaryExpression8516); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                          	newLeafNode(otherlv_8, grammarAccess.getUnaryExpressionAccess().getLeftSquareBracketKeyword_4_0());
                          
                    }
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3634:1: ( (lv_from_9_0= ruleExpression ) )
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3635:1: (lv_from_9_0= ruleExpression )
                    {
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3635:1: (lv_from_9_0= ruleExpression )
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3636:3: lv_from_9_0= ruleExpression
                    {
                    if ( state.backtracking==0 ) {
                       
                      	        newCompositeNode(grammarAccess.getUnaryExpressionAccess().getFromExpressionParserRuleCall_4_1_0()); 
                      	    
                    }
                    pushFollow(FOLLOW_ruleExpression_in_ruleUnaryExpression8537);
                    lv_from_9_0=ruleExpression();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      	        if (current==null) {
                      	            current = createModelElementForParent(grammarAccess.getUnaryExpressionRule());
                      	        }
                             		set(
                             			current, 
                             			"from",
                              		lv_from_9_0, 
                              		"Expression");
                      	        afterParserOrEnumRuleCall();
                      	    
                    }

                    }


                    }

                    otherlv_10=(Token)match(input,53,FOLLOW_53_in_ruleUnaryExpression8549); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                          	newLeafNode(otherlv_10, grammarAccess.getUnaryExpressionAccess().getCommaKeyword_4_2());
                          
                    }
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3656:1: ( (lv_to_11_0= ruleExpression ) )
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3657:1: (lv_to_11_0= ruleExpression )
                    {
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3657:1: (lv_to_11_0= ruleExpression )
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3658:3: lv_to_11_0= ruleExpression
                    {
                    if ( state.backtracking==0 ) {
                       
                      	        newCompositeNode(grammarAccess.getUnaryExpressionAccess().getToExpressionParserRuleCall_4_3_0()); 
                      	    
                    }
                    pushFollow(FOLLOW_ruleExpression_in_ruleUnaryExpression8570);
                    lv_to_11_0=ruleExpression();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      	        if (current==null) {
                      	            current = createModelElementForParent(grammarAccess.getUnaryExpressionRule());
                      	        }
                             		set(
                             			current, 
                             			"to",
                              		lv_to_11_0, 
                              		"Expression");
                      	        afterParserOrEnumRuleCall();
                      	    
                    }

                    }


                    }

                    otherlv_12=(Token)match(input,58,FOLLOW_58_in_ruleUnaryExpression8582); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                          	newLeafNode(otherlv_12, grammarAccess.getUnaryExpressionAccess().getRightSquareBracketKeyword_4_4());
                          
                    }

                    }


                    }
                    break;
                case 6 :
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3680:5: this_UnaryExpressionNotPlusMinus_13= ruleUnaryExpressionNotPlusMinus
                    {
                    if ( state.backtracking==0 ) {
                       
                              newCompositeNode(grammarAccess.getUnaryExpressionAccess().getUnaryExpressionNotPlusMinusParserRuleCall_5()); 
                          
                    }
                    pushFollow(FOLLOW_ruleUnaryExpressionNotPlusMinus_in_ruleUnaryExpression8611);
                    this_UnaryExpressionNotPlusMinus_13=ruleUnaryExpressionNotPlusMinus();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {
                       
                              current = this_UnaryExpressionNotPlusMinus_13; 
                              afterParserOrEnumRuleCall();
                          
                    }

                    }
                    break;

            }


            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleUnaryExpression"


    // $ANTLR start "entryRuleUnaryExpressionNotPlusMinus"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3696:1: entryRuleUnaryExpressionNotPlusMinus returns [EObject current=null] : iv_ruleUnaryExpressionNotPlusMinus= ruleUnaryExpressionNotPlusMinus EOF ;
    public final EObject entryRuleUnaryExpressionNotPlusMinus() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleUnaryExpressionNotPlusMinus = null;


        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3697:2: (iv_ruleUnaryExpressionNotPlusMinus= ruleUnaryExpressionNotPlusMinus EOF )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3698:2: iv_ruleUnaryExpressionNotPlusMinus= ruleUnaryExpressionNotPlusMinus EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getUnaryExpressionNotPlusMinusRule()); 
            }
            pushFollow(FOLLOW_ruleUnaryExpressionNotPlusMinus_in_entryRuleUnaryExpressionNotPlusMinus8646);
            iv_ruleUnaryExpressionNotPlusMinus=ruleUnaryExpressionNotPlusMinus();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleUnaryExpressionNotPlusMinus; 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRuleUnaryExpressionNotPlusMinus8656); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleUnaryExpressionNotPlusMinus"


    // $ANTLR start "ruleUnaryExpressionNotPlusMinus"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3705:1: ruleUnaryExpressionNotPlusMinus returns [EObject current=null] : ( () ( (otherlv_1= '!' ( (lv_unaryexpression_2_0= ruleUnaryExpression ) ) ) | ( ( ( ruleCastExpression ) )=> (lv_castexpression_3_0= ruleCastExpression ) ) | ( (lv_primary_4_0= rulePrimary ) ) | ( (lv_builtin_5_0= ruleBuilt_In_Methods ) ) ) ) ;
    public final EObject ruleUnaryExpressionNotPlusMinus() throws RecognitionException {
        EObject current = null;

        Token otherlv_1=null;
        EObject lv_unaryexpression_2_0 = null;

        EObject lv_castexpression_3_0 = null;

        EObject lv_primary_4_0 = null;

        EObject lv_builtin_5_0 = null;


         enterRule(); 
            
        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3708:28: ( ( () ( (otherlv_1= '!' ( (lv_unaryexpression_2_0= ruleUnaryExpression ) ) ) | ( ( ( ruleCastExpression ) )=> (lv_castexpression_3_0= ruleCastExpression ) ) | ( (lv_primary_4_0= rulePrimary ) ) | ( (lv_builtin_5_0= ruleBuilt_In_Methods ) ) ) ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3709:1: ( () ( (otherlv_1= '!' ( (lv_unaryexpression_2_0= ruleUnaryExpression ) ) ) | ( ( ( ruleCastExpression ) )=> (lv_castexpression_3_0= ruleCastExpression ) ) | ( (lv_primary_4_0= rulePrimary ) ) | ( (lv_builtin_5_0= ruleBuilt_In_Methods ) ) ) )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3709:1: ( () ( (otherlv_1= '!' ( (lv_unaryexpression_2_0= ruleUnaryExpression ) ) ) | ( ( ( ruleCastExpression ) )=> (lv_castexpression_3_0= ruleCastExpression ) ) | ( (lv_primary_4_0= rulePrimary ) ) | ( (lv_builtin_5_0= ruleBuilt_In_Methods ) ) ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3709:2: () ( (otherlv_1= '!' ( (lv_unaryexpression_2_0= ruleUnaryExpression ) ) ) | ( ( ( ruleCastExpression ) )=> (lv_castexpression_3_0= ruleCastExpression ) ) | ( (lv_primary_4_0= rulePrimary ) ) | ( (lv_builtin_5_0= ruleBuilt_In_Methods ) ) )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3709:2: ()
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3710:5: 
            {
            if ( state.backtracking==0 ) {

                      current = forceCreateModelElement(
                          grammarAccess.getUnaryExpressionNotPlusMinusAccess().getUnaryExpressionNotPlusMinusAction_0(),
                          current);
                  
            }

            }

            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3715:2: ( (otherlv_1= '!' ( (lv_unaryexpression_2_0= ruleUnaryExpression ) ) ) | ( ( ( ruleCastExpression ) )=> (lv_castexpression_3_0= ruleCastExpression ) ) | ( (lv_primary_4_0= rulePrimary ) ) | ( (lv_builtin_5_0= ruleBuilt_In_Methods ) ) )
            int alt58=4;
            alt58 = dfa58.predict(input);
            switch (alt58) {
                case 1 :
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3715:3: (otherlv_1= '!' ( (lv_unaryexpression_2_0= ruleUnaryExpression ) ) )
                    {
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3715:3: (otherlv_1= '!' ( (lv_unaryexpression_2_0= ruleUnaryExpression ) ) )
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3715:5: otherlv_1= '!' ( (lv_unaryexpression_2_0= ruleUnaryExpression ) )
                    {
                    otherlv_1=(Token)match(input,96,FOLLOW_96_in_ruleUnaryExpressionNotPlusMinus8704); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                          	newLeafNode(otherlv_1, grammarAccess.getUnaryExpressionNotPlusMinusAccess().getExclamationMarkKeyword_1_0_0());
                          
                    }
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3719:1: ( (lv_unaryexpression_2_0= ruleUnaryExpression ) )
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3720:1: (lv_unaryexpression_2_0= ruleUnaryExpression )
                    {
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3720:1: (lv_unaryexpression_2_0= ruleUnaryExpression )
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3721:3: lv_unaryexpression_2_0= ruleUnaryExpression
                    {
                    if ( state.backtracking==0 ) {
                       
                      	        newCompositeNode(grammarAccess.getUnaryExpressionNotPlusMinusAccess().getUnaryexpressionUnaryExpressionParserRuleCall_1_0_1_0()); 
                      	    
                    }
                    pushFollow(FOLLOW_ruleUnaryExpression_in_ruleUnaryExpressionNotPlusMinus8725);
                    lv_unaryexpression_2_0=ruleUnaryExpression();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      	        if (current==null) {
                      	            current = createModelElementForParent(grammarAccess.getUnaryExpressionNotPlusMinusRule());
                      	        }
                             		set(
                             			current, 
                             			"unaryexpression",
                              		lv_unaryexpression_2_0, 
                              		"UnaryExpression");
                      	        afterParserOrEnumRuleCall();
                      	    
                    }

                    }


                    }


                    }


                    }
                    break;
                case 2 :
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3738:6: ( ( ( ruleCastExpression ) )=> (lv_castexpression_3_0= ruleCastExpression ) )
                    {
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3738:6: ( ( ( ruleCastExpression ) )=> (lv_castexpression_3_0= ruleCastExpression ) )
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3738:7: ( ( ruleCastExpression ) )=> (lv_castexpression_3_0= ruleCastExpression )
                    {
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3743:1: (lv_castexpression_3_0= ruleCastExpression )
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3744:3: lv_castexpression_3_0= ruleCastExpression
                    {
                    if ( state.backtracking==0 ) {
                       
                      	        newCompositeNode(grammarAccess.getUnaryExpressionNotPlusMinusAccess().getCastexpressionCastExpressionParserRuleCall_1_1_0()); 
                      	    
                    }
                    pushFollow(FOLLOW_ruleCastExpression_in_ruleUnaryExpressionNotPlusMinus8763);
                    lv_castexpression_3_0=ruleCastExpression();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      	        if (current==null) {
                      	            current = createModelElementForParent(grammarAccess.getUnaryExpressionNotPlusMinusRule());
                      	        }
                             		set(
                             			current, 
                             			"castexpression",
                              		lv_castexpression_3_0, 
                              		"CastExpression");
                      	        afterParserOrEnumRuleCall();
                      	    
                    }

                    }


                    }


                    }
                    break;
                case 3 :
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3761:6: ( (lv_primary_4_0= rulePrimary ) )
                    {
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3761:6: ( (lv_primary_4_0= rulePrimary ) )
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3762:1: (lv_primary_4_0= rulePrimary )
                    {
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3762:1: (lv_primary_4_0= rulePrimary )
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3763:3: lv_primary_4_0= rulePrimary
                    {
                    if ( state.backtracking==0 ) {
                       
                      	        newCompositeNode(grammarAccess.getUnaryExpressionNotPlusMinusAccess().getPrimaryPrimaryParserRuleCall_1_2_0()); 
                      	    
                    }
                    pushFollow(FOLLOW_rulePrimary_in_ruleUnaryExpressionNotPlusMinus8790);
                    lv_primary_4_0=rulePrimary();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      	        if (current==null) {
                      	            current = createModelElementForParent(grammarAccess.getUnaryExpressionNotPlusMinusRule());
                      	        }
                             		set(
                             			current, 
                             			"primary",
                              		lv_primary_4_0, 
                              		"Primary");
                      	        afterParserOrEnumRuleCall();
                      	    
                    }

                    }


                    }


                    }
                    break;
                case 4 :
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3780:6: ( (lv_builtin_5_0= ruleBuilt_In_Methods ) )
                    {
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3780:6: ( (lv_builtin_5_0= ruleBuilt_In_Methods ) )
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3781:1: (lv_builtin_5_0= ruleBuilt_In_Methods )
                    {
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3781:1: (lv_builtin_5_0= ruleBuilt_In_Methods )
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3782:3: lv_builtin_5_0= ruleBuilt_In_Methods
                    {
                    if ( state.backtracking==0 ) {
                       
                      	        newCompositeNode(grammarAccess.getUnaryExpressionNotPlusMinusAccess().getBuiltinBuilt_In_MethodsParserRuleCall_1_3_0()); 
                      	    
                    }
                    pushFollow(FOLLOW_ruleBuilt_In_Methods_in_ruleUnaryExpressionNotPlusMinus8817);
                    lv_builtin_5_0=ruleBuilt_In_Methods();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      	        if (current==null) {
                      	            current = createModelElementForParent(grammarAccess.getUnaryExpressionNotPlusMinusRule());
                      	        }
                             		set(
                             			current, 
                             			"builtin",
                              		lv_builtin_5_0, 
                              		"Built_In_Methods");
                      	        afterParserOrEnumRuleCall();
                      	    
                    }

                    }


                    }


                    }
                    break;

            }


            }


            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleUnaryExpressionNotPlusMinus"


    // $ANTLR start "entryRulePrimary"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3806:1: entryRulePrimary returns [EObject current=null] : iv_rulePrimary= rulePrimary EOF ;
    public final EObject entryRulePrimary() throws RecognitionException {
        EObject current = null;

        EObject iv_rulePrimary = null;


        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3807:2: (iv_rulePrimary= rulePrimary EOF )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3808:2: iv_rulePrimary= rulePrimary EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getPrimaryRule()); 
            }
            pushFollow(FOLLOW_rulePrimary_in_entryRulePrimary8854);
            iv_rulePrimary=rulePrimary();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_rulePrimary; 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRulePrimary8864); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRulePrimary"


    // $ANTLR start "rulePrimary"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3815:1: rulePrimary returns [EObject current=null] : ( () ( ( (lv_parexpression_1_0= ruleParExpression ) ) | ( (lv_literal_2_0= ruleLiteral ) ) | ( (lv_newobject_3_0= ruleNewByClass ) ) | ( (lv_newarray_4_0= ruleNewArray ) ) | (otherlv_5= 'this' (otherlv_6= '.' ( (lv_identifier_7_0= RULE_ID ) ) ( (lv_dimer_8_0= ruleDimExpr ) )* )* ( ( ( ruleIdentifierSuffix ) )=> (lv_identifiersuffix_9_0= ruleIdentifierSuffix ) )? ) | ( ( (lv_identifier_10_0= RULE_ID ) ) ( (lv_dimer_11_0= ruleDimExpr ) )* (otherlv_12= '.' ( (lv_identifier_13_0= RULE_ID ) ) ( (lv_dimer_14_0= ruleDimExpr ) )* )* ( ( ( ruleIdentifierSuffix ) )=> (lv_identifiersuffix_15_0= ruleIdentifierSuffix ) )? ) ) ) ;
    public final EObject rulePrimary() throws RecognitionException {
        EObject current = null;

        Token otherlv_5=null;
        Token otherlv_6=null;
        Token lv_identifier_7_0=null;
        Token lv_identifier_10_0=null;
        Token otherlv_12=null;
        Token lv_identifier_13_0=null;
        EObject lv_parexpression_1_0 = null;

        EObject lv_literal_2_0 = null;

        EObject lv_newobject_3_0 = null;

        EObject lv_newarray_4_0 = null;

        EObject lv_dimer_8_0 = null;

        EObject lv_identifiersuffix_9_0 = null;

        EObject lv_dimer_11_0 = null;

        EObject lv_dimer_14_0 = null;

        EObject lv_identifiersuffix_15_0 = null;


         enterRule(); 
            
        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3818:28: ( ( () ( ( (lv_parexpression_1_0= ruleParExpression ) ) | ( (lv_literal_2_0= ruleLiteral ) ) | ( (lv_newobject_3_0= ruleNewByClass ) ) | ( (lv_newarray_4_0= ruleNewArray ) ) | (otherlv_5= 'this' (otherlv_6= '.' ( (lv_identifier_7_0= RULE_ID ) ) ( (lv_dimer_8_0= ruleDimExpr ) )* )* ( ( ( ruleIdentifierSuffix ) )=> (lv_identifiersuffix_9_0= ruleIdentifierSuffix ) )? ) | ( ( (lv_identifier_10_0= RULE_ID ) ) ( (lv_dimer_11_0= ruleDimExpr ) )* (otherlv_12= '.' ( (lv_identifier_13_0= RULE_ID ) ) ( (lv_dimer_14_0= ruleDimExpr ) )* )* ( ( ( ruleIdentifierSuffix ) )=> (lv_identifiersuffix_15_0= ruleIdentifierSuffix ) )? ) ) ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3819:1: ( () ( ( (lv_parexpression_1_0= ruleParExpression ) ) | ( (lv_literal_2_0= ruleLiteral ) ) | ( (lv_newobject_3_0= ruleNewByClass ) ) | ( (lv_newarray_4_0= ruleNewArray ) ) | (otherlv_5= 'this' (otherlv_6= '.' ( (lv_identifier_7_0= RULE_ID ) ) ( (lv_dimer_8_0= ruleDimExpr ) )* )* ( ( ( ruleIdentifierSuffix ) )=> (lv_identifiersuffix_9_0= ruleIdentifierSuffix ) )? ) | ( ( (lv_identifier_10_0= RULE_ID ) ) ( (lv_dimer_11_0= ruleDimExpr ) )* (otherlv_12= '.' ( (lv_identifier_13_0= RULE_ID ) ) ( (lv_dimer_14_0= ruleDimExpr ) )* )* ( ( ( ruleIdentifierSuffix ) )=> (lv_identifiersuffix_15_0= ruleIdentifierSuffix ) )? ) ) )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3819:1: ( () ( ( (lv_parexpression_1_0= ruleParExpression ) ) | ( (lv_literal_2_0= ruleLiteral ) ) | ( (lv_newobject_3_0= ruleNewByClass ) ) | ( (lv_newarray_4_0= ruleNewArray ) ) | (otherlv_5= 'this' (otherlv_6= '.' ( (lv_identifier_7_0= RULE_ID ) ) ( (lv_dimer_8_0= ruleDimExpr ) )* )* ( ( ( ruleIdentifierSuffix ) )=> (lv_identifiersuffix_9_0= ruleIdentifierSuffix ) )? ) | ( ( (lv_identifier_10_0= RULE_ID ) ) ( (lv_dimer_11_0= ruleDimExpr ) )* (otherlv_12= '.' ( (lv_identifier_13_0= RULE_ID ) ) ( (lv_dimer_14_0= ruleDimExpr ) )* )* ( ( ( ruleIdentifierSuffix ) )=> (lv_identifiersuffix_15_0= ruleIdentifierSuffix ) )? ) ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3819:2: () ( ( (lv_parexpression_1_0= ruleParExpression ) ) | ( (lv_literal_2_0= ruleLiteral ) ) | ( (lv_newobject_3_0= ruleNewByClass ) ) | ( (lv_newarray_4_0= ruleNewArray ) ) | (otherlv_5= 'this' (otherlv_6= '.' ( (lv_identifier_7_0= RULE_ID ) ) ( (lv_dimer_8_0= ruleDimExpr ) )* )* ( ( ( ruleIdentifierSuffix ) )=> (lv_identifiersuffix_9_0= ruleIdentifierSuffix ) )? ) | ( ( (lv_identifier_10_0= RULE_ID ) ) ( (lv_dimer_11_0= ruleDimExpr ) )* (otherlv_12= '.' ( (lv_identifier_13_0= RULE_ID ) ) ( (lv_dimer_14_0= ruleDimExpr ) )* )* ( ( ( ruleIdentifierSuffix ) )=> (lv_identifiersuffix_15_0= ruleIdentifierSuffix ) )? ) )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3819:2: ()
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3820:5: 
            {
            if ( state.backtracking==0 ) {

                      current = forceCreateModelElement(
                          grammarAccess.getPrimaryAccess().getPrimaryAction_0(),
                          current);
                  
            }

            }

            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3825:2: ( ( (lv_parexpression_1_0= ruleParExpression ) ) | ( (lv_literal_2_0= ruleLiteral ) ) | ( (lv_newobject_3_0= ruleNewByClass ) ) | ( (lv_newarray_4_0= ruleNewArray ) ) | (otherlv_5= 'this' (otherlv_6= '.' ( (lv_identifier_7_0= RULE_ID ) ) ( (lv_dimer_8_0= ruleDimExpr ) )* )* ( ( ( ruleIdentifierSuffix ) )=> (lv_identifiersuffix_9_0= ruleIdentifierSuffix ) )? ) | ( ( (lv_identifier_10_0= RULE_ID ) ) ( (lv_dimer_11_0= ruleDimExpr ) )* (otherlv_12= '.' ( (lv_identifier_13_0= RULE_ID ) ) ( (lv_dimer_14_0= ruleDimExpr ) )* )* ( ( ( ruleIdentifierSuffix ) )=> (lv_identifiersuffix_15_0= ruleIdentifierSuffix ) )? ) )
            int alt66=6;
            switch ( input.LA(1) ) {
            case 52:
                {
                alt66=1;
                }
                break;
            case RULE_FLOATING_POINT_LITERAL:
            case RULE_CHARACTER_LITERAL:
            case RULE_STRING_LITERAL:
            case RULE_HEX_LITERAL:
            case RULE_OCTAL_LITERAL:
            case RULE_DECIMAL_LITERAL:
            case 102:
            case 103:
            case 104:
            case 105:
                {
                alt66=2;
                }
                break;
            case 145:
                {
                int LA66_3 = input.LA(2);

                if ( (LA66_3==RULE_ID) ) {
                    int LA66_6 = input.LA(3);

                    if ( (LA66_6==52) ) {
                        alt66=3;
                    }
                    else if ( (LA66_6==57) ) {
                        alt66=4;
                    }
                    else {
                        if (state.backtracking>0) {state.failed=true; return current;}
                        NoViableAltException nvae =
                            new NoViableAltException("", 66, 6, input);

                        throw nvae;
                    }
                }
                else if ( ((LA66_3>=37 && LA66_3<=44)) ) {
                    alt66=4;
                }
                else {
                    if (state.backtracking>0) {state.failed=true; return current;}
                    NoViableAltException nvae =
                        new NoViableAltException("", 66, 3, input);

                    throw nvae;
                }
                }
                break;
            case 97:
                {
                alt66=5;
                }
                break;
            case RULE_ID:
                {
                alt66=6;
                }
                break;
            default:
                if (state.backtracking>0) {state.failed=true; return current;}
                NoViableAltException nvae =
                    new NoViableAltException("", 66, 0, input);

                throw nvae;
            }

            switch (alt66) {
                case 1 :
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3825:3: ( (lv_parexpression_1_0= ruleParExpression ) )
                    {
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3825:3: ( (lv_parexpression_1_0= ruleParExpression ) )
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3826:1: (lv_parexpression_1_0= ruleParExpression )
                    {
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3826:1: (lv_parexpression_1_0= ruleParExpression )
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3827:3: lv_parexpression_1_0= ruleParExpression
                    {
                    if ( state.backtracking==0 ) {
                       
                      	        newCompositeNode(grammarAccess.getPrimaryAccess().getParexpressionParExpressionParserRuleCall_1_0_0()); 
                      	    
                    }
                    pushFollow(FOLLOW_ruleParExpression_in_rulePrimary8920);
                    lv_parexpression_1_0=ruleParExpression();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      	        if (current==null) {
                      	            current = createModelElementForParent(grammarAccess.getPrimaryRule());
                      	        }
                             		set(
                             			current, 
                             			"parexpression",
                              		lv_parexpression_1_0, 
                              		"ParExpression");
                      	        afterParserOrEnumRuleCall();
                      	    
                    }

                    }


                    }


                    }
                    break;
                case 2 :
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3844:6: ( (lv_literal_2_0= ruleLiteral ) )
                    {
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3844:6: ( (lv_literal_2_0= ruleLiteral ) )
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3845:1: (lv_literal_2_0= ruleLiteral )
                    {
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3845:1: (lv_literal_2_0= ruleLiteral )
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3846:3: lv_literal_2_0= ruleLiteral
                    {
                    if ( state.backtracking==0 ) {
                       
                      	        newCompositeNode(grammarAccess.getPrimaryAccess().getLiteralLiteralParserRuleCall_1_1_0()); 
                      	    
                    }
                    pushFollow(FOLLOW_ruleLiteral_in_rulePrimary8947);
                    lv_literal_2_0=ruleLiteral();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      	        if (current==null) {
                      	            current = createModelElementForParent(grammarAccess.getPrimaryRule());
                      	        }
                             		set(
                             			current, 
                             			"literal",
                              		lv_literal_2_0, 
                              		"Literal");
                      	        afterParserOrEnumRuleCall();
                      	    
                    }

                    }


                    }


                    }
                    break;
                case 3 :
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3863:6: ( (lv_newobject_3_0= ruleNewByClass ) )
                    {
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3863:6: ( (lv_newobject_3_0= ruleNewByClass ) )
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3864:1: (lv_newobject_3_0= ruleNewByClass )
                    {
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3864:1: (lv_newobject_3_0= ruleNewByClass )
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3865:3: lv_newobject_3_0= ruleNewByClass
                    {
                    if ( state.backtracking==0 ) {
                       
                      	        newCompositeNode(grammarAccess.getPrimaryAccess().getNewobjectNewByClassParserRuleCall_1_2_0()); 
                      	    
                    }
                    pushFollow(FOLLOW_ruleNewByClass_in_rulePrimary8974);
                    lv_newobject_3_0=ruleNewByClass();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      	        if (current==null) {
                      	            current = createModelElementForParent(grammarAccess.getPrimaryRule());
                      	        }
                             		set(
                             			current, 
                             			"newobject",
                              		lv_newobject_3_0, 
                              		"NewByClass");
                      	        afterParserOrEnumRuleCall();
                      	    
                    }

                    }


                    }


                    }
                    break;
                case 4 :
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3882:6: ( (lv_newarray_4_0= ruleNewArray ) )
                    {
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3882:6: ( (lv_newarray_4_0= ruleNewArray ) )
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3883:1: (lv_newarray_4_0= ruleNewArray )
                    {
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3883:1: (lv_newarray_4_0= ruleNewArray )
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3884:3: lv_newarray_4_0= ruleNewArray
                    {
                    if ( state.backtracking==0 ) {
                       
                      	        newCompositeNode(grammarAccess.getPrimaryAccess().getNewarrayNewArrayParserRuleCall_1_3_0()); 
                      	    
                    }
                    pushFollow(FOLLOW_ruleNewArray_in_rulePrimary9001);
                    lv_newarray_4_0=ruleNewArray();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      	        if (current==null) {
                      	            current = createModelElementForParent(grammarAccess.getPrimaryRule());
                      	        }
                             		set(
                             			current, 
                             			"newarray",
                              		lv_newarray_4_0, 
                              		"NewArray");
                      	        afterParserOrEnumRuleCall();
                      	    
                    }

                    }


                    }


                    }
                    break;
                case 5 :
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3901:6: (otherlv_5= 'this' (otherlv_6= '.' ( (lv_identifier_7_0= RULE_ID ) ) ( (lv_dimer_8_0= ruleDimExpr ) )* )* ( ( ( ruleIdentifierSuffix ) )=> (lv_identifiersuffix_9_0= ruleIdentifierSuffix ) )? )
                    {
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3901:6: (otherlv_5= 'this' (otherlv_6= '.' ( (lv_identifier_7_0= RULE_ID ) ) ( (lv_dimer_8_0= ruleDimExpr ) )* )* ( ( ( ruleIdentifierSuffix ) )=> (lv_identifiersuffix_9_0= ruleIdentifierSuffix ) )? )
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3901:8: otherlv_5= 'this' (otherlv_6= '.' ( (lv_identifier_7_0= RULE_ID ) ) ( (lv_dimer_8_0= ruleDimExpr ) )* )* ( ( ( ruleIdentifierSuffix ) )=> (lv_identifiersuffix_9_0= ruleIdentifierSuffix ) )?
                    {
                    otherlv_5=(Token)match(input,97,FOLLOW_97_in_rulePrimary9020); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                          	newLeafNode(otherlv_5, grammarAccess.getPrimaryAccess().getThisKeyword_1_4_0());
                          
                    }
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3905:1: (otherlv_6= '.' ( (lv_identifier_7_0= RULE_ID ) ) ( (lv_dimer_8_0= ruleDimExpr ) )* )*
                    loop60:
                    do {
                        int alt60=2;
                        int LA60_0 = input.LA(1);

                        if ( (LA60_0==32) ) {
                            int LA60_2 = input.LA(2);

                            if ( (LA60_2==RULE_ID) ) {
                                alt60=1;
                            }


                        }


                        switch (alt60) {
                    	case 1 :
                    	    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3905:3: otherlv_6= '.' ( (lv_identifier_7_0= RULE_ID ) ) ( (lv_dimer_8_0= ruleDimExpr ) )*
                    	    {
                    	    otherlv_6=(Token)match(input,32,FOLLOW_32_in_rulePrimary9033); if (state.failed) return current;
                    	    if ( state.backtracking==0 ) {

                    	          	newLeafNode(otherlv_6, grammarAccess.getPrimaryAccess().getFullStopKeyword_1_4_1_0());
                    	          
                    	    }
                    	    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3909:1: ( (lv_identifier_7_0= RULE_ID ) )
                    	    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3910:1: (lv_identifier_7_0= RULE_ID )
                    	    {
                    	    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3910:1: (lv_identifier_7_0= RULE_ID )
                    	    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3911:3: lv_identifier_7_0= RULE_ID
                    	    {
                    	    lv_identifier_7_0=(Token)match(input,RULE_ID,FOLLOW_RULE_ID_in_rulePrimary9050); if (state.failed) return current;
                    	    if ( state.backtracking==0 ) {

                    	      			newLeafNode(lv_identifier_7_0, grammarAccess.getPrimaryAccess().getIdentifierIDTerminalRuleCall_1_4_1_1_0()); 
                    	      		
                    	    }
                    	    if ( state.backtracking==0 ) {

                    	      	        if (current==null) {
                    	      	            current = createModelElement(grammarAccess.getPrimaryRule());
                    	      	        }
                    	             		addWithLastConsumed(
                    	             			current, 
                    	             			"identifier",
                    	              		lv_identifier_7_0, 
                    	              		"ID");
                    	      	    
                    	    }

                    	    }


                    	    }

                    	    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3927:2: ( (lv_dimer_8_0= ruleDimExpr ) )*
                    	    loop59:
                    	    do {
                    	        int alt59=2;
                    	        int LA59_0 = input.LA(1);

                    	        if ( (LA59_0==57) ) {
                    	            int LA59_1 = input.LA(2);

                    	            if ( (LA59_1==RULE_ID||(LA59_1>=RULE_FLOATING_POINT_LITERAL && LA59_1<=RULE_DECIMAL_LITERAL)||LA59_1==52||LA59_1==57||(LA59_1>=89 && LA59_1<=90)||(LA59_1>=94 && LA59_1<=97)||(LA59_1>=102 && LA59_1<=106)||(LA59_1>=109 && LA59_1<=137)||LA59_1==145) ) {
                    	                alt59=1;
                    	            }


                    	        }


                    	        switch (alt59) {
                    	    	case 1 :
                    	    	    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3928:1: (lv_dimer_8_0= ruleDimExpr )
                    	    	    {
                    	    	    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3928:1: (lv_dimer_8_0= ruleDimExpr )
                    	    	    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3929:3: lv_dimer_8_0= ruleDimExpr
                    	    	    {
                    	    	    if ( state.backtracking==0 ) {
                    	    	       
                    	    	      	        newCompositeNode(grammarAccess.getPrimaryAccess().getDimerDimExprParserRuleCall_1_4_1_2_0()); 
                    	    	      	    
                    	    	    }
                    	    	    pushFollow(FOLLOW_ruleDimExpr_in_rulePrimary9076);
                    	    	    lv_dimer_8_0=ruleDimExpr();

                    	    	    state._fsp--;
                    	    	    if (state.failed) return current;
                    	    	    if ( state.backtracking==0 ) {

                    	    	      	        if (current==null) {
                    	    	      	            current = createModelElementForParent(grammarAccess.getPrimaryRule());
                    	    	      	        }
                    	    	             		add(
                    	    	             			current, 
                    	    	             			"dimer",
                    	    	              		lv_dimer_8_0, 
                    	    	              		"DimExpr");
                    	    	      	        afterParserOrEnumRuleCall();
                    	    	      	    
                    	    	    }

                    	    	    }


                    	    	    }
                    	    	    break;

                    	    	default :
                    	    	    break loop59;
                    	        }
                    	    } while (true);


                    	    }
                    	    break;

                    	default :
                    	    break loop60;
                        }
                    } while (true);

                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3945:5: ( ( ( ruleIdentifierSuffix ) )=> (lv_identifiersuffix_9_0= ruleIdentifierSuffix ) )?
                    int alt61=2;
                    int LA61_0 = input.LA(1);

                    if ( (LA61_0==57) && (synpred3_InternalApricot())) {
                        alt61=1;
                    }
                    else if ( (LA61_0==52) && (synpred3_InternalApricot())) {
                        alt61=1;
                    }
                    else if ( (LA61_0==32) && (synpred3_InternalApricot())) {
                        alt61=1;
                    }
                    else if ( (LA61_0==100) && (synpred3_InternalApricot())) {
                        alt61=1;
                    }
                    else if ( (LA61_0==101) && (synpred3_InternalApricot())) {
                        alt61=1;
                    }
                    switch (alt61) {
                        case 1 :
                            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3945:6: ( ( ruleIdentifierSuffix ) )=> (lv_identifiersuffix_9_0= ruleIdentifierSuffix )
                            {
                            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3950:1: (lv_identifiersuffix_9_0= ruleIdentifierSuffix )
                            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3951:3: lv_identifiersuffix_9_0= ruleIdentifierSuffix
                            {
                            if ( state.backtracking==0 ) {
                               
                              	        newCompositeNode(grammarAccess.getPrimaryAccess().getIdentifiersuffixIdentifierSuffixParserRuleCall_1_4_2_0()); 
                              	    
                            }
                            pushFollow(FOLLOW_ruleIdentifierSuffix_in_rulePrimary9110);
                            lv_identifiersuffix_9_0=ruleIdentifierSuffix();

                            state._fsp--;
                            if (state.failed) return current;
                            if ( state.backtracking==0 ) {

                              	        if (current==null) {
                              	            current = createModelElementForParent(grammarAccess.getPrimaryRule());
                              	        }
                                     		set(
                                     			current, 
                                     			"identifiersuffix",
                                      		lv_identifiersuffix_9_0, 
                                      		"IdentifierSuffix");
                              	        afterParserOrEnumRuleCall();
                              	    
                            }

                            }


                            }
                            break;

                    }


                    }


                    }
                    break;
                case 6 :
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3968:6: ( ( (lv_identifier_10_0= RULE_ID ) ) ( (lv_dimer_11_0= ruleDimExpr ) )* (otherlv_12= '.' ( (lv_identifier_13_0= RULE_ID ) ) ( (lv_dimer_14_0= ruleDimExpr ) )* )* ( ( ( ruleIdentifierSuffix ) )=> (lv_identifiersuffix_15_0= ruleIdentifierSuffix ) )? )
                    {
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3968:6: ( ( (lv_identifier_10_0= RULE_ID ) ) ( (lv_dimer_11_0= ruleDimExpr ) )* (otherlv_12= '.' ( (lv_identifier_13_0= RULE_ID ) ) ( (lv_dimer_14_0= ruleDimExpr ) )* )* ( ( ( ruleIdentifierSuffix ) )=> (lv_identifiersuffix_15_0= ruleIdentifierSuffix ) )? )
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3968:7: ( (lv_identifier_10_0= RULE_ID ) ) ( (lv_dimer_11_0= ruleDimExpr ) )* (otherlv_12= '.' ( (lv_identifier_13_0= RULE_ID ) ) ( (lv_dimer_14_0= ruleDimExpr ) )* )* ( ( ( ruleIdentifierSuffix ) )=> (lv_identifiersuffix_15_0= ruleIdentifierSuffix ) )?
                    {
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3968:7: ( (lv_identifier_10_0= RULE_ID ) )
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3969:1: (lv_identifier_10_0= RULE_ID )
                    {
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3969:1: (lv_identifier_10_0= RULE_ID )
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3970:3: lv_identifier_10_0= RULE_ID
                    {
                    lv_identifier_10_0=(Token)match(input,RULE_ID,FOLLOW_RULE_ID_in_rulePrimary9136); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      			newLeafNode(lv_identifier_10_0, grammarAccess.getPrimaryAccess().getIdentifierIDTerminalRuleCall_1_5_0_0()); 
                      		
                    }
                    if ( state.backtracking==0 ) {

                      	        if (current==null) {
                      	            current = createModelElement(grammarAccess.getPrimaryRule());
                      	        }
                             		addWithLastConsumed(
                             			current, 
                             			"identifier",
                              		lv_identifier_10_0, 
                              		"ID");
                      	    
                    }

                    }


                    }

                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3986:2: ( (lv_dimer_11_0= ruleDimExpr ) )*
                    loop62:
                    do {
                        int alt62=2;
                        int LA62_0 = input.LA(1);

                        if ( (LA62_0==57) ) {
                            int LA62_2 = input.LA(2);

                            if ( (LA62_2==RULE_ID||(LA62_2>=RULE_FLOATING_POINT_LITERAL && LA62_2<=RULE_DECIMAL_LITERAL)||LA62_2==52||LA62_2==57||(LA62_2>=89 && LA62_2<=90)||(LA62_2>=94 && LA62_2<=97)||(LA62_2>=102 && LA62_2<=106)||(LA62_2>=109 && LA62_2<=137)||LA62_2==145) ) {
                                alt62=1;
                            }


                        }


                        switch (alt62) {
                    	case 1 :
                    	    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3987:1: (lv_dimer_11_0= ruleDimExpr )
                    	    {
                    	    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3987:1: (lv_dimer_11_0= ruleDimExpr )
                    	    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3988:3: lv_dimer_11_0= ruleDimExpr
                    	    {
                    	    if ( state.backtracking==0 ) {
                    	       
                    	      	        newCompositeNode(grammarAccess.getPrimaryAccess().getDimerDimExprParserRuleCall_1_5_1_0()); 
                    	      	    
                    	    }
                    	    pushFollow(FOLLOW_ruleDimExpr_in_rulePrimary9162);
                    	    lv_dimer_11_0=ruleDimExpr();

                    	    state._fsp--;
                    	    if (state.failed) return current;
                    	    if ( state.backtracking==0 ) {

                    	      	        if (current==null) {
                    	      	            current = createModelElementForParent(grammarAccess.getPrimaryRule());
                    	      	        }
                    	             		add(
                    	             			current, 
                    	             			"dimer",
                    	              		lv_dimer_11_0, 
                    	              		"DimExpr");
                    	      	        afterParserOrEnumRuleCall();
                    	      	    
                    	    }

                    	    }


                    	    }
                    	    break;

                    	default :
                    	    break loop62;
                        }
                    } while (true);

                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4004:3: (otherlv_12= '.' ( (lv_identifier_13_0= RULE_ID ) ) ( (lv_dimer_14_0= ruleDimExpr ) )* )*
                    loop64:
                    do {
                        int alt64=2;
                        int LA64_0 = input.LA(1);

                        if ( (LA64_0==32) ) {
                            int LA64_2 = input.LA(2);

                            if ( (LA64_2==RULE_ID) ) {
                                alt64=1;
                            }


                        }


                        switch (alt64) {
                    	case 1 :
                    	    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4004:5: otherlv_12= '.' ( (lv_identifier_13_0= RULE_ID ) ) ( (lv_dimer_14_0= ruleDimExpr ) )*
                    	    {
                    	    otherlv_12=(Token)match(input,32,FOLLOW_32_in_rulePrimary9176); if (state.failed) return current;
                    	    if ( state.backtracking==0 ) {

                    	          	newLeafNode(otherlv_12, grammarAccess.getPrimaryAccess().getFullStopKeyword_1_5_2_0());
                    	          
                    	    }
                    	    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4008:1: ( (lv_identifier_13_0= RULE_ID ) )
                    	    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4009:1: (lv_identifier_13_0= RULE_ID )
                    	    {
                    	    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4009:1: (lv_identifier_13_0= RULE_ID )
                    	    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4010:3: lv_identifier_13_0= RULE_ID
                    	    {
                    	    lv_identifier_13_0=(Token)match(input,RULE_ID,FOLLOW_RULE_ID_in_rulePrimary9193); if (state.failed) return current;
                    	    if ( state.backtracking==0 ) {

                    	      			newLeafNode(lv_identifier_13_0, grammarAccess.getPrimaryAccess().getIdentifierIDTerminalRuleCall_1_5_2_1_0()); 
                    	      		
                    	    }
                    	    if ( state.backtracking==0 ) {

                    	      	        if (current==null) {
                    	      	            current = createModelElement(grammarAccess.getPrimaryRule());
                    	      	        }
                    	             		addWithLastConsumed(
                    	             			current, 
                    	             			"identifier",
                    	              		lv_identifier_13_0, 
                    	              		"ID");
                    	      	    
                    	    }

                    	    }


                    	    }

                    	    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4026:2: ( (lv_dimer_14_0= ruleDimExpr ) )*
                    	    loop63:
                    	    do {
                    	        int alt63=2;
                    	        int LA63_0 = input.LA(1);

                    	        if ( (LA63_0==57) ) {
                    	            int LA63_1 = input.LA(2);

                    	            if ( (LA63_1==RULE_ID||(LA63_1>=RULE_FLOATING_POINT_LITERAL && LA63_1<=RULE_DECIMAL_LITERAL)||LA63_1==52||LA63_1==57||(LA63_1>=89 && LA63_1<=90)||(LA63_1>=94 && LA63_1<=97)||(LA63_1>=102 && LA63_1<=106)||(LA63_1>=109 && LA63_1<=137)||LA63_1==145) ) {
                    	                alt63=1;
                    	            }


                    	        }


                    	        switch (alt63) {
                    	    	case 1 :
                    	    	    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4027:1: (lv_dimer_14_0= ruleDimExpr )
                    	    	    {
                    	    	    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4027:1: (lv_dimer_14_0= ruleDimExpr )
                    	    	    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4028:3: lv_dimer_14_0= ruleDimExpr
                    	    	    {
                    	    	    if ( state.backtracking==0 ) {
                    	    	       
                    	    	      	        newCompositeNode(grammarAccess.getPrimaryAccess().getDimerDimExprParserRuleCall_1_5_2_2_0()); 
                    	    	      	    
                    	    	    }
                    	    	    pushFollow(FOLLOW_ruleDimExpr_in_rulePrimary9219);
                    	    	    lv_dimer_14_0=ruleDimExpr();

                    	    	    state._fsp--;
                    	    	    if (state.failed) return current;
                    	    	    if ( state.backtracking==0 ) {

                    	    	      	        if (current==null) {
                    	    	      	            current = createModelElementForParent(grammarAccess.getPrimaryRule());
                    	    	      	        }
                    	    	             		add(
                    	    	             			current, 
                    	    	             			"dimer",
                    	    	              		lv_dimer_14_0, 
                    	    	              		"DimExpr");
                    	    	      	        afterParserOrEnumRuleCall();
                    	    	      	    
                    	    	    }

                    	    	    }


                    	    	    }
                    	    	    break;

                    	    	default :
                    	    	    break loop63;
                    	        }
                    	    } while (true);


                    	    }
                    	    break;

                    	default :
                    	    break loop64;
                        }
                    } while (true);

                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4044:5: ( ( ( ruleIdentifierSuffix ) )=> (lv_identifiersuffix_15_0= ruleIdentifierSuffix ) )?
                    int alt65=2;
                    int LA65_0 = input.LA(1);

                    if ( (LA65_0==57) && (synpred4_InternalApricot())) {
                        alt65=1;
                    }
                    else if ( (LA65_0==52) && (synpred4_InternalApricot())) {
                        alt65=1;
                    }
                    else if ( (LA65_0==32) && (synpred4_InternalApricot())) {
                        alt65=1;
                    }
                    else if ( (LA65_0==100) && (synpred4_InternalApricot())) {
                        alt65=1;
                    }
                    else if ( (LA65_0==101) && (synpred4_InternalApricot())) {
                        alt65=1;
                    }
                    switch (alt65) {
                        case 1 :
                            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4044:6: ( ( ruleIdentifierSuffix ) )=> (lv_identifiersuffix_15_0= ruleIdentifierSuffix )
                            {
                            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4049:1: (lv_identifiersuffix_15_0= ruleIdentifierSuffix )
                            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4050:3: lv_identifiersuffix_15_0= ruleIdentifierSuffix
                            {
                            if ( state.backtracking==0 ) {
                               
                              	        newCompositeNode(grammarAccess.getPrimaryAccess().getIdentifiersuffixIdentifierSuffixParserRuleCall_1_5_3_0()); 
                              	    
                            }
                            pushFollow(FOLLOW_ruleIdentifierSuffix_in_rulePrimary9253);
                            lv_identifiersuffix_15_0=ruleIdentifierSuffix();

                            state._fsp--;
                            if (state.failed) return current;
                            if ( state.backtracking==0 ) {

                              	        if (current==null) {
                              	            current = createModelElementForParent(grammarAccess.getPrimaryRule());
                              	        }
                                     		set(
                                     			current, 
                                     			"identifiersuffix",
                                      		lv_identifiersuffix_15_0, 
                                      		"IdentifierSuffix");
                              	        afterParserOrEnumRuleCall();
                              	    
                            }

                            }


                            }
                            break;

                    }


                    }


                    }
                    break;

            }


            }


            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "rulePrimary"


    // $ANTLR start "entryRuleIdentifierSuffix"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4074:1: entryRuleIdentifierSuffix returns [EObject current=null] : iv_ruleIdentifierSuffix= ruleIdentifierSuffix EOF ;
    public final EObject entryRuleIdentifierSuffix() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleIdentifierSuffix = null;


        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4075:2: (iv_ruleIdentifierSuffix= ruleIdentifierSuffix EOF )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4076:2: iv_ruleIdentifierSuffix= ruleIdentifierSuffix EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getIdentifierSuffixRule()); 
            }
            pushFollow(FOLLOW_ruleIdentifierSuffix_in_entryRuleIdentifierSuffix9292);
            iv_ruleIdentifierSuffix=ruleIdentifierSuffix();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleIdentifierSuffix; 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRuleIdentifierSuffix9302); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleIdentifierSuffix"


    // $ANTLR start "ruleIdentifierSuffix"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4083:1: ruleIdentifierSuffix returns [EObject current=null] : ( () ( ( (otherlv_1= '[' otherlv_2= ']' )+ otherlv_3= '.' otherlv_4= 'class' ) | ( (lv_arguments_5_0= ruleArguments ) ) | (otherlv_6= '.' otherlv_7= 'class' ) | (otherlv_8= '.' otherlv_9= 'this' ) | (otherlv_10= '.' otherlv_11= 'super' ( (lv_arguments_12_0= ruleArguments ) ) ) | (otherlv_13= '.' ( (lv_getvalue_14_0= 'at' ) ) ( (lv_arguments_15_0= ruleArguments ) ) ) | (otherlv_16= '.' otherlv_17= 'Composition' otherlv_18= '(' otherlv_19= ')' ) | (otherlv_20= '.' otherlv_21= 'Start' otherlv_22= '(' otherlv_23= ')' ) | otherlv_24= '(!)' | otherlv_25= '(?)' ) ) ;
    public final EObject ruleIdentifierSuffix() throws RecognitionException {
        EObject current = null;

        Token otherlv_1=null;
        Token otherlv_2=null;
        Token otherlv_3=null;
        Token otherlv_4=null;
        Token otherlv_6=null;
        Token otherlv_7=null;
        Token otherlv_8=null;
        Token otherlv_9=null;
        Token otherlv_10=null;
        Token otherlv_11=null;
        Token otherlv_13=null;
        Token lv_getvalue_14_0=null;
        Token otherlv_16=null;
        Token otherlv_17=null;
        Token otherlv_18=null;
        Token otherlv_19=null;
        Token otherlv_20=null;
        Token otherlv_21=null;
        Token otherlv_22=null;
        Token otherlv_23=null;
        Token otherlv_24=null;
        Token otherlv_25=null;
        EObject lv_arguments_5_0 = null;

        EObject lv_arguments_12_0 = null;

        EObject lv_arguments_15_0 = null;


         enterRule(); 
            
        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4086:28: ( ( () ( ( (otherlv_1= '[' otherlv_2= ']' )+ otherlv_3= '.' otherlv_4= 'class' ) | ( (lv_arguments_5_0= ruleArguments ) ) | (otherlv_6= '.' otherlv_7= 'class' ) | (otherlv_8= '.' otherlv_9= 'this' ) | (otherlv_10= '.' otherlv_11= 'super' ( (lv_arguments_12_0= ruleArguments ) ) ) | (otherlv_13= '.' ( (lv_getvalue_14_0= 'at' ) ) ( (lv_arguments_15_0= ruleArguments ) ) ) | (otherlv_16= '.' otherlv_17= 'Composition' otherlv_18= '(' otherlv_19= ')' ) | (otherlv_20= '.' otherlv_21= 'Start' otherlv_22= '(' otherlv_23= ')' ) | otherlv_24= '(!)' | otherlv_25= '(?)' ) ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4087:1: ( () ( ( (otherlv_1= '[' otherlv_2= ']' )+ otherlv_3= '.' otherlv_4= 'class' ) | ( (lv_arguments_5_0= ruleArguments ) ) | (otherlv_6= '.' otherlv_7= 'class' ) | (otherlv_8= '.' otherlv_9= 'this' ) | (otherlv_10= '.' otherlv_11= 'super' ( (lv_arguments_12_0= ruleArguments ) ) ) | (otherlv_13= '.' ( (lv_getvalue_14_0= 'at' ) ) ( (lv_arguments_15_0= ruleArguments ) ) ) | (otherlv_16= '.' otherlv_17= 'Composition' otherlv_18= '(' otherlv_19= ')' ) | (otherlv_20= '.' otherlv_21= 'Start' otherlv_22= '(' otherlv_23= ')' ) | otherlv_24= '(!)' | otherlv_25= '(?)' ) )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4087:1: ( () ( ( (otherlv_1= '[' otherlv_2= ']' )+ otherlv_3= '.' otherlv_4= 'class' ) | ( (lv_arguments_5_0= ruleArguments ) ) | (otherlv_6= '.' otherlv_7= 'class' ) | (otherlv_8= '.' otherlv_9= 'this' ) | (otherlv_10= '.' otherlv_11= 'super' ( (lv_arguments_12_0= ruleArguments ) ) ) | (otherlv_13= '.' ( (lv_getvalue_14_0= 'at' ) ) ( (lv_arguments_15_0= ruleArguments ) ) ) | (otherlv_16= '.' otherlv_17= 'Composition' otherlv_18= '(' otherlv_19= ')' ) | (otherlv_20= '.' otherlv_21= 'Start' otherlv_22= '(' otherlv_23= ')' ) | otherlv_24= '(!)' | otherlv_25= '(?)' ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4087:2: () ( ( (otherlv_1= '[' otherlv_2= ']' )+ otherlv_3= '.' otherlv_4= 'class' ) | ( (lv_arguments_5_0= ruleArguments ) ) | (otherlv_6= '.' otherlv_7= 'class' ) | (otherlv_8= '.' otherlv_9= 'this' ) | (otherlv_10= '.' otherlv_11= 'super' ( (lv_arguments_12_0= ruleArguments ) ) ) | (otherlv_13= '.' ( (lv_getvalue_14_0= 'at' ) ) ( (lv_arguments_15_0= ruleArguments ) ) ) | (otherlv_16= '.' otherlv_17= 'Composition' otherlv_18= '(' otherlv_19= ')' ) | (otherlv_20= '.' otherlv_21= 'Start' otherlv_22= '(' otherlv_23= ')' ) | otherlv_24= '(!)' | otherlv_25= '(?)' )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4087:2: ()
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4088:5: 
            {
            if ( state.backtracking==0 ) {

                      current = forceCreateModelElement(
                          grammarAccess.getIdentifierSuffixAccess().getIdentifierSuffixAction_0(),
                          current);
                  
            }

            }

            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4093:2: ( ( (otherlv_1= '[' otherlv_2= ']' )+ otherlv_3= '.' otherlv_4= 'class' ) | ( (lv_arguments_5_0= ruleArguments ) ) | (otherlv_6= '.' otherlv_7= 'class' ) | (otherlv_8= '.' otherlv_9= 'this' ) | (otherlv_10= '.' otherlv_11= 'super' ( (lv_arguments_12_0= ruleArguments ) ) ) | (otherlv_13= '.' ( (lv_getvalue_14_0= 'at' ) ) ( (lv_arguments_15_0= ruleArguments ) ) ) | (otherlv_16= '.' otherlv_17= 'Composition' otherlv_18= '(' otherlv_19= ')' ) | (otherlv_20= '.' otherlv_21= 'Start' otherlv_22= '(' otherlv_23= ')' ) | otherlv_24= '(!)' | otherlv_25= '(?)' )
            int alt68=10;
            alt68 = dfa68.predict(input);
            switch (alt68) {
                case 1 :
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4093:3: ( (otherlv_1= '[' otherlv_2= ']' )+ otherlv_3= '.' otherlv_4= 'class' )
                    {
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4093:3: ( (otherlv_1= '[' otherlv_2= ']' )+ otherlv_3= '.' otherlv_4= 'class' )
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4093:4: (otherlv_1= '[' otherlv_2= ']' )+ otherlv_3= '.' otherlv_4= 'class'
                    {
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4093:4: (otherlv_1= '[' otherlv_2= ']' )+
                    int cnt67=0;
                    loop67:
                    do {
                        int alt67=2;
                        int LA67_0 = input.LA(1);

                        if ( (LA67_0==57) ) {
                            alt67=1;
                        }


                        switch (alt67) {
                    	case 1 :
                    	    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4093:6: otherlv_1= '[' otherlv_2= ']'
                    	    {
                    	    otherlv_1=(Token)match(input,57,FOLLOW_57_in_ruleIdentifierSuffix9351); if (state.failed) return current;
                    	    if ( state.backtracking==0 ) {

                    	          	newLeafNode(otherlv_1, grammarAccess.getIdentifierSuffixAccess().getLeftSquareBracketKeyword_1_0_0_0());
                    	          
                    	    }
                    	    otherlv_2=(Token)match(input,58,FOLLOW_58_in_ruleIdentifierSuffix9363); if (state.failed) return current;
                    	    if ( state.backtracking==0 ) {

                    	          	newLeafNode(otherlv_2, grammarAccess.getIdentifierSuffixAccess().getRightSquareBracketKeyword_1_0_0_1());
                    	          
                    	    }

                    	    }
                    	    break;

                    	default :
                    	    if ( cnt67 >= 1 ) break loop67;
                    	    if (state.backtracking>0) {state.failed=true; return current;}
                                EarlyExitException eee =
                                    new EarlyExitException(67, input);
                                throw eee;
                        }
                        cnt67++;
                    } while (true);

                    otherlv_3=(Token)match(input,32,FOLLOW_32_in_ruleIdentifierSuffix9377); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                          	newLeafNode(otherlv_3, grammarAccess.getIdentifierSuffixAccess().getFullStopKeyword_1_0_1());
                          
                    }
                    otherlv_4=(Token)match(input,49,FOLLOW_49_in_ruleIdentifierSuffix9389); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                          	newLeafNode(otherlv_4, grammarAccess.getIdentifierSuffixAccess().getClassKeyword_1_0_2());
                          
                    }

                    }


                    }
                    break;
                case 2 :
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4110:6: ( (lv_arguments_5_0= ruleArguments ) )
                    {
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4110:6: ( (lv_arguments_5_0= ruleArguments ) )
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4111:1: (lv_arguments_5_0= ruleArguments )
                    {
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4111:1: (lv_arguments_5_0= ruleArguments )
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4112:3: lv_arguments_5_0= ruleArguments
                    {
                    if ( state.backtracking==0 ) {
                       
                      	        newCompositeNode(grammarAccess.getIdentifierSuffixAccess().getArgumentsArgumentsParserRuleCall_1_1_0()); 
                      	    
                    }
                    pushFollow(FOLLOW_ruleArguments_in_ruleIdentifierSuffix9417);
                    lv_arguments_5_0=ruleArguments();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      	        if (current==null) {
                      	            current = createModelElementForParent(grammarAccess.getIdentifierSuffixRule());
                      	        }
                             		set(
                             			current, 
                             			"arguments",
                              		lv_arguments_5_0, 
                              		"Arguments");
                      	        afterParserOrEnumRuleCall();
                      	    
                    }

                    }


                    }


                    }
                    break;
                case 3 :
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4129:6: (otherlv_6= '.' otherlv_7= 'class' )
                    {
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4129:6: (otherlv_6= '.' otherlv_7= 'class' )
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4129:8: otherlv_6= '.' otherlv_7= 'class'
                    {
                    otherlv_6=(Token)match(input,32,FOLLOW_32_in_ruleIdentifierSuffix9436); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                          	newLeafNode(otherlv_6, grammarAccess.getIdentifierSuffixAccess().getFullStopKeyword_1_2_0());
                          
                    }
                    otherlv_7=(Token)match(input,49,FOLLOW_49_in_ruleIdentifierSuffix9448); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                          	newLeafNode(otherlv_7, grammarAccess.getIdentifierSuffixAccess().getClassKeyword_1_2_1());
                          
                    }

                    }


                    }
                    break;
                case 4 :
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4138:6: (otherlv_8= '.' otherlv_9= 'this' )
                    {
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4138:6: (otherlv_8= '.' otherlv_9= 'this' )
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4138:8: otherlv_8= '.' otherlv_9= 'this'
                    {
                    otherlv_8=(Token)match(input,32,FOLLOW_32_in_ruleIdentifierSuffix9468); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                          	newLeafNode(otherlv_8, grammarAccess.getIdentifierSuffixAccess().getFullStopKeyword_1_3_0());
                          
                    }
                    otherlv_9=(Token)match(input,97,FOLLOW_97_in_ruleIdentifierSuffix9480); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                          	newLeafNode(otherlv_9, grammarAccess.getIdentifierSuffixAccess().getThisKeyword_1_3_1());
                          
                    }

                    }


                    }
                    break;
                case 5 :
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4147:6: (otherlv_10= '.' otherlv_11= 'super' ( (lv_arguments_12_0= ruleArguments ) ) )
                    {
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4147:6: (otherlv_10= '.' otherlv_11= 'super' ( (lv_arguments_12_0= ruleArguments ) ) )
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4147:8: otherlv_10= '.' otherlv_11= 'super' ( (lv_arguments_12_0= ruleArguments ) )
                    {
                    otherlv_10=(Token)match(input,32,FOLLOW_32_in_ruleIdentifierSuffix9500); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                          	newLeafNode(otherlv_10, grammarAccess.getIdentifierSuffixAccess().getFullStopKeyword_1_4_0());
                          
                    }
                    otherlv_11=(Token)match(input,98,FOLLOW_98_in_ruleIdentifierSuffix9512); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                          	newLeafNode(otherlv_11, grammarAccess.getIdentifierSuffixAccess().getSuperKeyword_1_4_1());
                          
                    }
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4155:1: ( (lv_arguments_12_0= ruleArguments ) )
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4156:1: (lv_arguments_12_0= ruleArguments )
                    {
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4156:1: (lv_arguments_12_0= ruleArguments )
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4157:3: lv_arguments_12_0= ruleArguments
                    {
                    if ( state.backtracking==0 ) {
                       
                      	        newCompositeNode(grammarAccess.getIdentifierSuffixAccess().getArgumentsArgumentsParserRuleCall_1_4_2_0()); 
                      	    
                    }
                    pushFollow(FOLLOW_ruleArguments_in_ruleIdentifierSuffix9533);
                    lv_arguments_12_0=ruleArguments();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      	        if (current==null) {
                      	            current = createModelElementForParent(grammarAccess.getIdentifierSuffixRule());
                      	        }
                             		set(
                             			current, 
                             			"arguments",
                              		lv_arguments_12_0, 
                              		"Arguments");
                      	        afterParserOrEnumRuleCall();
                      	    
                    }

                    }


                    }


                    }


                    }
                    break;
                case 6 :
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4174:6: (otherlv_13= '.' ( (lv_getvalue_14_0= 'at' ) ) ( (lv_arguments_15_0= ruleArguments ) ) )
                    {
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4174:6: (otherlv_13= '.' ( (lv_getvalue_14_0= 'at' ) ) ( (lv_arguments_15_0= ruleArguments ) ) )
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4174:8: otherlv_13= '.' ( (lv_getvalue_14_0= 'at' ) ) ( (lv_arguments_15_0= ruleArguments ) )
                    {
                    otherlv_13=(Token)match(input,32,FOLLOW_32_in_ruleIdentifierSuffix9553); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                          	newLeafNode(otherlv_13, grammarAccess.getIdentifierSuffixAccess().getFullStopKeyword_1_5_0());
                          
                    }
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4178:1: ( (lv_getvalue_14_0= 'at' ) )
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4179:1: (lv_getvalue_14_0= 'at' )
                    {
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4179:1: (lv_getvalue_14_0= 'at' )
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4180:3: lv_getvalue_14_0= 'at'
                    {
                    lv_getvalue_14_0=(Token)match(input,99,FOLLOW_99_in_ruleIdentifierSuffix9571); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                              newLeafNode(lv_getvalue_14_0, grammarAccess.getIdentifierSuffixAccess().getGetvalueAtKeyword_1_5_1_0());
                          
                    }
                    if ( state.backtracking==0 ) {

                      	        if (current==null) {
                      	            current = createModelElement(grammarAccess.getIdentifierSuffixRule());
                      	        }
                             		setWithLastConsumed(current, "getvalue", lv_getvalue_14_0, "at");
                      	    
                    }

                    }


                    }

                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4193:2: ( (lv_arguments_15_0= ruleArguments ) )
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4194:1: (lv_arguments_15_0= ruleArguments )
                    {
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4194:1: (lv_arguments_15_0= ruleArguments )
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4195:3: lv_arguments_15_0= ruleArguments
                    {
                    if ( state.backtracking==0 ) {
                       
                      	        newCompositeNode(grammarAccess.getIdentifierSuffixAccess().getArgumentsArgumentsParserRuleCall_1_5_2_0()); 
                      	    
                    }
                    pushFollow(FOLLOW_ruleArguments_in_ruleIdentifierSuffix9605);
                    lv_arguments_15_0=ruleArguments();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      	        if (current==null) {
                      	            current = createModelElementForParent(grammarAccess.getIdentifierSuffixRule());
                      	        }
                             		set(
                             			current, 
                             			"arguments",
                              		lv_arguments_15_0, 
                              		"Arguments");
                      	        afterParserOrEnumRuleCall();
                      	    
                    }

                    }


                    }


                    }


                    }
                    break;
                case 7 :
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4212:6: (otherlv_16= '.' otherlv_17= 'Composition' otherlv_18= '(' otherlv_19= ')' )
                    {
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4212:6: (otherlv_16= '.' otherlv_17= 'Composition' otherlv_18= '(' otherlv_19= ')' )
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4212:8: otherlv_16= '.' otherlv_17= 'Composition' otherlv_18= '(' otherlv_19= ')'
                    {
                    otherlv_16=(Token)match(input,32,FOLLOW_32_in_ruleIdentifierSuffix9625); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                          	newLeafNode(otherlv_16, grammarAccess.getIdentifierSuffixAccess().getFullStopKeyword_1_6_0());
                          
                    }
                    otherlv_17=(Token)match(input,62,FOLLOW_62_in_ruleIdentifierSuffix9637); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                          	newLeafNode(otherlv_17, grammarAccess.getIdentifierSuffixAccess().getCompositionKeyword_1_6_1());
                          
                    }
                    otherlv_18=(Token)match(input,52,FOLLOW_52_in_ruleIdentifierSuffix9649); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                          	newLeafNode(otherlv_18, grammarAccess.getIdentifierSuffixAccess().getLeftParenthesisKeyword_1_6_2());
                          
                    }
                    otherlv_19=(Token)match(input,54,FOLLOW_54_in_ruleIdentifierSuffix9661); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                          	newLeafNode(otherlv_19, grammarAccess.getIdentifierSuffixAccess().getRightParenthesisKeyword_1_6_3());
                          
                    }

                    }


                    }
                    break;
                case 8 :
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4229:6: (otherlv_20= '.' otherlv_21= 'Start' otherlv_22= '(' otherlv_23= ')' )
                    {
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4229:6: (otherlv_20= '.' otherlv_21= 'Start' otherlv_22= '(' otherlv_23= ')' )
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4229:8: otherlv_20= '.' otherlv_21= 'Start' otherlv_22= '(' otherlv_23= ')'
                    {
                    otherlv_20=(Token)match(input,32,FOLLOW_32_in_ruleIdentifierSuffix9681); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                          	newLeafNode(otherlv_20, grammarAccess.getIdentifierSuffixAccess().getFullStopKeyword_1_7_0());
                          
                    }
                    otherlv_21=(Token)match(input,63,FOLLOW_63_in_ruleIdentifierSuffix9693); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                          	newLeafNode(otherlv_21, grammarAccess.getIdentifierSuffixAccess().getStartKeyword_1_7_1());
                          
                    }
                    otherlv_22=(Token)match(input,52,FOLLOW_52_in_ruleIdentifierSuffix9705); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                          	newLeafNode(otherlv_22, grammarAccess.getIdentifierSuffixAccess().getLeftParenthesisKeyword_1_7_2());
                          
                    }
                    otherlv_23=(Token)match(input,54,FOLLOW_54_in_ruleIdentifierSuffix9717); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                          	newLeafNode(otherlv_23, grammarAccess.getIdentifierSuffixAccess().getRightParenthesisKeyword_1_7_3());
                          
                    }

                    }


                    }
                    break;
                case 9 :
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4246:7: otherlv_24= '(!)'
                    {
                    otherlv_24=(Token)match(input,100,FOLLOW_100_in_ruleIdentifierSuffix9736); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                          	newLeafNode(otherlv_24, grammarAccess.getIdentifierSuffixAccess().getLeftParenthesisExclamationMarkRightParenthesisKeyword_1_8());
                          
                    }

                    }
                    break;
                case 10 :
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4251:7: otherlv_25= '(?)'
                    {
                    otherlv_25=(Token)match(input,101,FOLLOW_101_in_ruleIdentifierSuffix9754); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                          	newLeafNode(otherlv_25, grammarAccess.getIdentifierSuffixAccess().getLeftParenthesisQuestionMarkRightParenthesisKeyword_1_9());
                          
                    }

                    }
                    break;

            }


            }


            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleIdentifierSuffix"


    // $ANTLR start "entryRuleArguments"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4263:1: entryRuleArguments returns [EObject current=null] : iv_ruleArguments= ruleArguments EOF ;
    public final EObject entryRuleArguments() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleArguments = null;


        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4264:2: (iv_ruleArguments= ruleArguments EOF )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4265:2: iv_ruleArguments= ruleArguments EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getArgumentsRule()); 
            }
            pushFollow(FOLLOW_ruleArguments_in_entryRuleArguments9791);
            iv_ruleArguments=ruleArguments();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleArguments; 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRuleArguments9801); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleArguments"


    // $ANTLR start "ruleArguments"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4272:1: ruleArguments returns [EObject current=null] : ( () otherlv_1= '(' ( (lv_expressionlist_2_0= ruleExpressionList ) )? otherlv_3= ')' ) ;
    public final EObject ruleArguments() throws RecognitionException {
        EObject current = null;

        Token otherlv_1=null;
        Token otherlv_3=null;
        EObject lv_expressionlist_2_0 = null;


         enterRule(); 
            
        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4275:28: ( ( () otherlv_1= '(' ( (lv_expressionlist_2_0= ruleExpressionList ) )? otherlv_3= ')' ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4276:1: ( () otherlv_1= '(' ( (lv_expressionlist_2_0= ruleExpressionList ) )? otherlv_3= ')' )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4276:1: ( () otherlv_1= '(' ( (lv_expressionlist_2_0= ruleExpressionList ) )? otherlv_3= ')' )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4276:2: () otherlv_1= '(' ( (lv_expressionlist_2_0= ruleExpressionList ) )? otherlv_3= ')'
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4276:2: ()
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4277:5: 
            {
            if ( state.backtracking==0 ) {

                      current = forceCreateModelElement(
                          grammarAccess.getArgumentsAccess().getArgumentsAction_0(),
                          current);
                  
            }

            }

            otherlv_1=(Token)match(input,52,FOLLOW_52_in_ruleArguments9847); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_1, grammarAccess.getArgumentsAccess().getLeftParenthesisKeyword_1());
                  
            }
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4286:1: ( (lv_expressionlist_2_0= ruleExpressionList ) )?
            int alt69=2;
            int LA69_0 = input.LA(1);

            if ( (LA69_0==RULE_ID||(LA69_0>=RULE_FLOATING_POINT_LITERAL && LA69_0<=RULE_DECIMAL_LITERAL)||LA69_0==52||LA69_0==57||(LA69_0>=89 && LA69_0<=90)||(LA69_0>=94 && LA69_0<=97)||(LA69_0>=102 && LA69_0<=106)||(LA69_0>=109 && LA69_0<=137)||LA69_0==145) ) {
                alt69=1;
            }
            switch (alt69) {
                case 1 :
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4287:1: (lv_expressionlist_2_0= ruleExpressionList )
                    {
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4287:1: (lv_expressionlist_2_0= ruleExpressionList )
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4288:3: lv_expressionlist_2_0= ruleExpressionList
                    {
                    if ( state.backtracking==0 ) {
                       
                      	        newCompositeNode(grammarAccess.getArgumentsAccess().getExpressionlistExpressionListParserRuleCall_2_0()); 
                      	    
                    }
                    pushFollow(FOLLOW_ruleExpressionList_in_ruleArguments9868);
                    lv_expressionlist_2_0=ruleExpressionList();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      	        if (current==null) {
                      	            current = createModelElementForParent(grammarAccess.getArgumentsRule());
                      	        }
                             		set(
                             			current, 
                             			"expressionlist",
                              		lv_expressionlist_2_0, 
                              		"ExpressionList");
                      	        afterParserOrEnumRuleCall();
                      	    
                    }

                    }


                    }
                    break;

            }

            otherlv_3=(Token)match(input,54,FOLLOW_54_in_ruleArguments9881); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_3, grammarAccess.getArgumentsAccess().getRightParenthesisKeyword_3());
                  
            }

            }


            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleArguments"


    // $ANTLR start "entryRuleExpressionList"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4316:1: entryRuleExpressionList returns [EObject current=null] : iv_ruleExpressionList= ruleExpressionList EOF ;
    public final EObject entryRuleExpressionList() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleExpressionList = null;


        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4317:2: (iv_ruleExpressionList= ruleExpressionList EOF )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4318:2: iv_ruleExpressionList= ruleExpressionList EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getExpressionListRule()); 
            }
            pushFollow(FOLLOW_ruleExpressionList_in_entryRuleExpressionList9917);
            iv_ruleExpressionList=ruleExpressionList();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleExpressionList; 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRuleExpressionList9927); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleExpressionList"


    // $ANTLR start "ruleExpressionList"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4325:1: ruleExpressionList returns [EObject current=null] : ( ( (lv_expression1_0_0= ruleExpression ) ) (otherlv_1= ',' ( (lv_expression2_2_0= ruleExpression ) ) )* ) ;
    public final EObject ruleExpressionList() throws RecognitionException {
        EObject current = null;

        Token otherlv_1=null;
        EObject lv_expression1_0_0 = null;

        EObject lv_expression2_2_0 = null;


         enterRule(); 
            
        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4328:28: ( ( ( (lv_expression1_0_0= ruleExpression ) ) (otherlv_1= ',' ( (lv_expression2_2_0= ruleExpression ) ) )* ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4329:1: ( ( (lv_expression1_0_0= ruleExpression ) ) (otherlv_1= ',' ( (lv_expression2_2_0= ruleExpression ) ) )* )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4329:1: ( ( (lv_expression1_0_0= ruleExpression ) ) (otherlv_1= ',' ( (lv_expression2_2_0= ruleExpression ) ) )* )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4329:2: ( (lv_expression1_0_0= ruleExpression ) ) (otherlv_1= ',' ( (lv_expression2_2_0= ruleExpression ) ) )*
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4329:2: ( (lv_expression1_0_0= ruleExpression ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4330:1: (lv_expression1_0_0= ruleExpression )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4330:1: (lv_expression1_0_0= ruleExpression )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4331:3: lv_expression1_0_0= ruleExpression
            {
            if ( state.backtracking==0 ) {
               
              	        newCompositeNode(grammarAccess.getExpressionListAccess().getExpression1ExpressionParserRuleCall_0_0()); 
              	    
            }
            pushFollow(FOLLOW_ruleExpression_in_ruleExpressionList9973);
            lv_expression1_0_0=ruleExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              	        if (current==null) {
              	            current = createModelElementForParent(grammarAccess.getExpressionListRule());
              	        }
                     		set(
                     			current, 
                     			"expression1",
                      		lv_expression1_0_0, 
                      		"Expression");
              	        afterParserOrEnumRuleCall();
              	    
            }

            }


            }

            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4347:2: (otherlv_1= ',' ( (lv_expression2_2_0= ruleExpression ) ) )*
            loop70:
            do {
                int alt70=2;
                int LA70_0 = input.LA(1);

                if ( (LA70_0==53) ) {
                    alt70=1;
                }


                switch (alt70) {
            	case 1 :
            	    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4347:4: otherlv_1= ',' ( (lv_expression2_2_0= ruleExpression ) )
            	    {
            	    otherlv_1=(Token)match(input,53,FOLLOW_53_in_ruleExpressionList9986); if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	          	newLeafNode(otherlv_1, grammarAccess.getExpressionListAccess().getCommaKeyword_1_0());
            	          
            	    }
            	    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4351:1: ( (lv_expression2_2_0= ruleExpression ) )
            	    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4352:1: (lv_expression2_2_0= ruleExpression )
            	    {
            	    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4352:1: (lv_expression2_2_0= ruleExpression )
            	    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4353:3: lv_expression2_2_0= ruleExpression
            	    {
            	    if ( state.backtracking==0 ) {
            	       
            	      	        newCompositeNode(grammarAccess.getExpressionListAccess().getExpression2ExpressionParserRuleCall_1_1_0()); 
            	      	    
            	    }
            	    pushFollow(FOLLOW_ruleExpression_in_ruleExpressionList10007);
            	    lv_expression2_2_0=ruleExpression();

            	    state._fsp--;
            	    if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      	        if (current==null) {
            	      	            current = createModelElementForParent(grammarAccess.getExpressionListRule());
            	      	        }
            	             		add(
            	             			current, 
            	             			"expression2",
            	              		lv_expression2_2_0, 
            	              		"Expression");
            	      	        afterParserOrEnumRuleCall();
            	      	    
            	    }

            	    }


            	    }


            	    }
            	    break;

            	default :
            	    break loop70;
                }
            } while (true);


            }


            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleExpressionList"


    // $ANTLR start "entryRuleCastExpression"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4377:1: entryRuleCastExpression returns [EObject current=null] : iv_ruleCastExpression= ruleCastExpression EOF ;
    public final EObject entryRuleCastExpression() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleCastExpression = null;


        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4378:2: (iv_ruleCastExpression= ruleCastExpression EOF )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4379:2: iv_ruleCastExpression= ruleCastExpression EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getCastExpressionRule()); 
            }
            pushFollow(FOLLOW_ruleCastExpression_in_entryRuleCastExpression10045);
            iv_ruleCastExpression=ruleCastExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleCastExpression; 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRuleCastExpression10055); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleCastExpression"


    // $ANTLR start "ruleCastExpression"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4386:1: ruleCastExpression returns [EObject current=null] : ( () otherlv_1= '(' ( (lv_type_2_0= ruleUseType ) ) otherlv_3= ')' ( (lv_expression_4_0= ruleUnaryExpressionNotPlusMinus ) ) ) ;
    public final EObject ruleCastExpression() throws RecognitionException {
        EObject current = null;

        Token otherlv_1=null;
        Token otherlv_3=null;
        EObject lv_type_2_0 = null;

        EObject lv_expression_4_0 = null;


         enterRule(); 
            
        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4389:28: ( ( () otherlv_1= '(' ( (lv_type_2_0= ruleUseType ) ) otherlv_3= ')' ( (lv_expression_4_0= ruleUnaryExpressionNotPlusMinus ) ) ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4390:1: ( () otherlv_1= '(' ( (lv_type_2_0= ruleUseType ) ) otherlv_3= ')' ( (lv_expression_4_0= ruleUnaryExpressionNotPlusMinus ) ) )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4390:1: ( () otherlv_1= '(' ( (lv_type_2_0= ruleUseType ) ) otherlv_3= ')' ( (lv_expression_4_0= ruleUnaryExpressionNotPlusMinus ) ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4390:2: () otherlv_1= '(' ( (lv_type_2_0= ruleUseType ) ) otherlv_3= ')' ( (lv_expression_4_0= ruleUnaryExpressionNotPlusMinus ) )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4390:2: ()
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4391:5: 
            {
            if ( state.backtracking==0 ) {

                      current = forceCreateModelElement(
                          grammarAccess.getCastExpressionAccess().getCastExpressionAction_0(),
                          current);
                  
            }

            }

            otherlv_1=(Token)match(input,52,FOLLOW_52_in_ruleCastExpression10101); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_1, grammarAccess.getCastExpressionAccess().getLeftParenthesisKeyword_1());
                  
            }
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4400:1: ( (lv_type_2_0= ruleUseType ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4401:1: (lv_type_2_0= ruleUseType )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4401:1: (lv_type_2_0= ruleUseType )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4402:3: lv_type_2_0= ruleUseType
            {
            if ( state.backtracking==0 ) {
               
              	        newCompositeNode(grammarAccess.getCastExpressionAccess().getTypeUseTypeParserRuleCall_2_0()); 
              	    
            }
            pushFollow(FOLLOW_ruleUseType_in_ruleCastExpression10122);
            lv_type_2_0=ruleUseType();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              	        if (current==null) {
              	            current = createModelElementForParent(grammarAccess.getCastExpressionRule());
              	        }
                     		set(
                     			current, 
                     			"type",
                      		lv_type_2_0, 
                      		"UseType");
              	        afterParserOrEnumRuleCall();
              	    
            }

            }


            }

            otherlv_3=(Token)match(input,54,FOLLOW_54_in_ruleCastExpression10134); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_3, grammarAccess.getCastExpressionAccess().getRightParenthesisKeyword_3());
                  
            }
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4422:1: ( (lv_expression_4_0= ruleUnaryExpressionNotPlusMinus ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4423:1: (lv_expression_4_0= ruleUnaryExpressionNotPlusMinus )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4423:1: (lv_expression_4_0= ruleUnaryExpressionNotPlusMinus )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4424:3: lv_expression_4_0= ruleUnaryExpressionNotPlusMinus
            {
            if ( state.backtracking==0 ) {
               
              	        newCompositeNode(grammarAccess.getCastExpressionAccess().getExpressionUnaryExpressionNotPlusMinusParserRuleCall_4_0()); 
              	    
            }
            pushFollow(FOLLOW_ruleUnaryExpressionNotPlusMinus_in_ruleCastExpression10155);
            lv_expression_4_0=ruleUnaryExpressionNotPlusMinus();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              	        if (current==null) {
              	            current = createModelElementForParent(grammarAccess.getCastExpressionRule());
              	        }
                     		set(
                     			current, 
                     			"expression",
                      		lv_expression_4_0, 
                      		"UnaryExpressionNotPlusMinus");
              	        afterParserOrEnumRuleCall();
              	    
            }

            }


            }


            }


            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleCastExpression"


    // $ANTLR start "entryRuleParExpression"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4448:1: entryRuleParExpression returns [EObject current=null] : iv_ruleParExpression= ruleParExpression EOF ;
    public final EObject entryRuleParExpression() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleParExpression = null;


        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4449:2: (iv_ruleParExpression= ruleParExpression EOF )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4450:2: iv_ruleParExpression= ruleParExpression EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getParExpressionRule()); 
            }
            pushFollow(FOLLOW_ruleParExpression_in_entryRuleParExpression10191);
            iv_ruleParExpression=ruleParExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleParExpression; 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRuleParExpression10201); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleParExpression"


    // $ANTLR start "ruleParExpression"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4457:1: ruleParExpression returns [EObject current=null] : (otherlv_0= '(' ( (lv_expression1_1_0= ruleExpression ) ) (otherlv_2= ',' ( (lv_expression2_3_0= ruleExpression ) ) )* otherlv_4= ')' ) ;
    public final EObject ruleParExpression() throws RecognitionException {
        EObject current = null;

        Token otherlv_0=null;
        Token otherlv_2=null;
        Token otherlv_4=null;
        EObject lv_expression1_1_0 = null;

        EObject lv_expression2_3_0 = null;


         enterRule(); 
            
        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4460:28: ( (otherlv_0= '(' ( (lv_expression1_1_0= ruleExpression ) ) (otherlv_2= ',' ( (lv_expression2_3_0= ruleExpression ) ) )* otherlv_4= ')' ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4461:1: (otherlv_0= '(' ( (lv_expression1_1_0= ruleExpression ) ) (otherlv_2= ',' ( (lv_expression2_3_0= ruleExpression ) ) )* otherlv_4= ')' )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4461:1: (otherlv_0= '(' ( (lv_expression1_1_0= ruleExpression ) ) (otherlv_2= ',' ( (lv_expression2_3_0= ruleExpression ) ) )* otherlv_4= ')' )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4461:3: otherlv_0= '(' ( (lv_expression1_1_0= ruleExpression ) ) (otherlv_2= ',' ( (lv_expression2_3_0= ruleExpression ) ) )* otherlv_4= ')'
            {
            otherlv_0=(Token)match(input,52,FOLLOW_52_in_ruleParExpression10238); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_0, grammarAccess.getParExpressionAccess().getLeftParenthesisKeyword_0());
                  
            }
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4465:1: ( (lv_expression1_1_0= ruleExpression ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4466:1: (lv_expression1_1_0= ruleExpression )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4466:1: (lv_expression1_1_0= ruleExpression )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4467:3: lv_expression1_1_0= ruleExpression
            {
            if ( state.backtracking==0 ) {
               
              	        newCompositeNode(grammarAccess.getParExpressionAccess().getExpression1ExpressionParserRuleCall_1_0()); 
              	    
            }
            pushFollow(FOLLOW_ruleExpression_in_ruleParExpression10259);
            lv_expression1_1_0=ruleExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              	        if (current==null) {
              	            current = createModelElementForParent(grammarAccess.getParExpressionRule());
              	        }
                     		set(
                     			current, 
                     			"expression1",
                      		lv_expression1_1_0, 
                      		"Expression");
              	        afterParserOrEnumRuleCall();
              	    
            }

            }


            }

            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4483:2: (otherlv_2= ',' ( (lv_expression2_3_0= ruleExpression ) ) )*
            loop71:
            do {
                int alt71=2;
                int LA71_0 = input.LA(1);

                if ( (LA71_0==53) ) {
                    alt71=1;
                }


                switch (alt71) {
            	case 1 :
            	    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4483:4: otherlv_2= ',' ( (lv_expression2_3_0= ruleExpression ) )
            	    {
            	    otherlv_2=(Token)match(input,53,FOLLOW_53_in_ruleParExpression10272); if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	          	newLeafNode(otherlv_2, grammarAccess.getParExpressionAccess().getCommaKeyword_2_0());
            	          
            	    }
            	    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4487:1: ( (lv_expression2_3_0= ruleExpression ) )
            	    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4488:1: (lv_expression2_3_0= ruleExpression )
            	    {
            	    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4488:1: (lv_expression2_3_0= ruleExpression )
            	    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4489:3: lv_expression2_3_0= ruleExpression
            	    {
            	    if ( state.backtracking==0 ) {
            	       
            	      	        newCompositeNode(grammarAccess.getParExpressionAccess().getExpression2ExpressionParserRuleCall_2_1_0()); 
            	      	    
            	    }
            	    pushFollow(FOLLOW_ruleExpression_in_ruleParExpression10293);
            	    lv_expression2_3_0=ruleExpression();

            	    state._fsp--;
            	    if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      	        if (current==null) {
            	      	            current = createModelElementForParent(grammarAccess.getParExpressionRule());
            	      	        }
            	             		add(
            	             			current, 
            	             			"expression2",
            	              		lv_expression2_3_0, 
            	              		"Expression");
            	      	        afterParserOrEnumRuleCall();
            	      	    
            	    }

            	    }


            	    }


            	    }
            	    break;

            	default :
            	    break loop71;
                }
            } while (true);

            otherlv_4=(Token)match(input,54,FOLLOW_54_in_ruleParExpression10307); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_4, grammarAccess.getParExpressionAccess().getRightParenthesisKeyword_3());
                  
            }

            }


            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleParExpression"


    // $ANTLR start "entryRuleLiteral"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4517:1: entryRuleLiteral returns [EObject current=null] : iv_ruleLiteral= ruleLiteral EOF ;
    public final EObject entryRuleLiteral() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleLiteral = null;


        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4518:2: (iv_ruleLiteral= ruleLiteral EOF )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4519:2: iv_ruleLiteral= ruleLiteral EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getLiteralRule()); 
            }
            pushFollow(FOLLOW_ruleLiteral_in_entryRuleLiteral10343);
            iv_ruleLiteral=ruleLiteral();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleLiteral; 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRuleLiteral10353); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleLiteral"


    // $ANTLR start "ruleLiteral"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4526:1: ruleLiteral returns [EObject current=null] : ( ( () ( (lv_value_1_0= 'Inf' ) ) ) | ( () ( (lv_value_3_0= ruleIntegerLiteral ) ) ) | ( () ( (lv_value_5_0= RULE_FLOATING_POINT_LITERAL ) ) ) | ( () ( (lv_value_7_0= RULE_CHARACTER_LITERAL ) ) ) | ( () ( (lv_value_9_0= RULE_STRING_LITERAL ) ) ) | ( () ( (lv_value_11_0= ruleBooleanLiteral ) ) ) | ( () ( (lv_value_13_0= 'null' ) ) ) ) ;
    public final EObject ruleLiteral() throws RecognitionException {
        EObject current = null;

        Token lv_value_1_0=null;
        Token lv_value_5_0=null;
        Token lv_value_7_0=null;
        Token lv_value_9_0=null;
        Token lv_value_13_0=null;
        AntlrDatatypeRuleToken lv_value_3_0 = null;

        AntlrDatatypeRuleToken lv_value_11_0 = null;


         enterRule(); 
            
        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4529:28: ( ( ( () ( (lv_value_1_0= 'Inf' ) ) ) | ( () ( (lv_value_3_0= ruleIntegerLiteral ) ) ) | ( () ( (lv_value_5_0= RULE_FLOATING_POINT_LITERAL ) ) ) | ( () ( (lv_value_7_0= RULE_CHARACTER_LITERAL ) ) ) | ( () ( (lv_value_9_0= RULE_STRING_LITERAL ) ) ) | ( () ( (lv_value_11_0= ruleBooleanLiteral ) ) ) | ( () ( (lv_value_13_0= 'null' ) ) ) ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4530:1: ( ( () ( (lv_value_1_0= 'Inf' ) ) ) | ( () ( (lv_value_3_0= ruleIntegerLiteral ) ) ) | ( () ( (lv_value_5_0= RULE_FLOATING_POINT_LITERAL ) ) ) | ( () ( (lv_value_7_0= RULE_CHARACTER_LITERAL ) ) ) | ( () ( (lv_value_9_0= RULE_STRING_LITERAL ) ) ) | ( () ( (lv_value_11_0= ruleBooleanLiteral ) ) ) | ( () ( (lv_value_13_0= 'null' ) ) ) )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4530:1: ( ( () ( (lv_value_1_0= 'Inf' ) ) ) | ( () ( (lv_value_3_0= ruleIntegerLiteral ) ) ) | ( () ( (lv_value_5_0= RULE_FLOATING_POINT_LITERAL ) ) ) | ( () ( (lv_value_7_0= RULE_CHARACTER_LITERAL ) ) ) | ( () ( (lv_value_9_0= RULE_STRING_LITERAL ) ) ) | ( () ( (lv_value_11_0= ruleBooleanLiteral ) ) ) | ( () ( (lv_value_13_0= 'null' ) ) ) )
            int alt72=7;
            switch ( input.LA(1) ) {
            case 102:
                {
                alt72=1;
                }
                break;
            case RULE_HEX_LITERAL:
            case RULE_OCTAL_LITERAL:
            case RULE_DECIMAL_LITERAL:
                {
                alt72=2;
                }
                break;
            case RULE_FLOATING_POINT_LITERAL:
                {
                alt72=3;
                }
                break;
            case RULE_CHARACTER_LITERAL:
                {
                alt72=4;
                }
                break;
            case RULE_STRING_LITERAL:
                {
                alt72=5;
                }
                break;
            case 104:
            case 105:
                {
                alt72=6;
                }
                break;
            case 103:
                {
                alt72=7;
                }
                break;
            default:
                if (state.backtracking>0) {state.failed=true; return current;}
                NoViableAltException nvae =
                    new NoViableAltException("", 72, 0, input);

                throw nvae;
            }

            switch (alt72) {
                case 1 :
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4530:2: ( () ( (lv_value_1_0= 'Inf' ) ) )
                    {
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4530:2: ( () ( (lv_value_1_0= 'Inf' ) ) )
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4530:3: () ( (lv_value_1_0= 'Inf' ) )
                    {
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4530:3: ()
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4531:5: 
                    {
                    if ( state.backtracking==0 ) {

                              current = forceCreateModelElement(
                                  grammarAccess.getLiteralAccess().getInfiniteLiteralAction_0_0(),
                                  current);
                          
                    }

                    }

                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4536:2: ( (lv_value_1_0= 'Inf' ) )
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4537:1: (lv_value_1_0= 'Inf' )
                    {
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4537:1: (lv_value_1_0= 'Inf' )
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4538:3: lv_value_1_0= 'Inf'
                    {
                    lv_value_1_0=(Token)match(input,102,FOLLOW_102_in_ruleLiteral10406); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                              newLeafNode(lv_value_1_0, grammarAccess.getLiteralAccess().getValueInfKeyword_0_1_0());
                          
                    }
                    if ( state.backtracking==0 ) {

                      	        if (current==null) {
                      	            current = createModelElement(grammarAccess.getLiteralRule());
                      	        }
                             		setWithLastConsumed(current, "value", lv_value_1_0, "Inf");
                      	    
                    }

                    }


                    }


                    }


                    }
                    break;
                case 2 :
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4552:6: ( () ( (lv_value_3_0= ruleIntegerLiteral ) ) )
                    {
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4552:6: ( () ( (lv_value_3_0= ruleIntegerLiteral ) ) )
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4552:7: () ( (lv_value_3_0= ruleIntegerLiteral ) )
                    {
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4552:7: ()
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4553:5: 
                    {
                    if ( state.backtracking==0 ) {

                              current = forceCreateModelElement(
                                  grammarAccess.getLiteralAccess().getIntegerLiteralAction_1_0(),
                                  current);
                          
                    }

                    }

                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4558:2: ( (lv_value_3_0= ruleIntegerLiteral ) )
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4559:1: (lv_value_3_0= ruleIntegerLiteral )
                    {
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4559:1: (lv_value_3_0= ruleIntegerLiteral )
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4560:3: lv_value_3_0= ruleIntegerLiteral
                    {
                    if ( state.backtracking==0 ) {
                       
                      	        newCompositeNode(grammarAccess.getLiteralAccess().getValueIntegerLiteralParserRuleCall_1_1_0()); 
                      	    
                    }
                    pushFollow(FOLLOW_ruleIntegerLiteral_in_ruleLiteral10457);
                    lv_value_3_0=ruleIntegerLiteral();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      	        if (current==null) {
                      	            current = createModelElementForParent(grammarAccess.getLiteralRule());
                      	        }
                             		set(
                             			current, 
                             			"value",
                              		lv_value_3_0, 
                              		"IntegerLiteral");
                      	        afterParserOrEnumRuleCall();
                      	    
                    }

                    }


                    }


                    }


                    }
                    break;
                case 3 :
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4577:6: ( () ( (lv_value_5_0= RULE_FLOATING_POINT_LITERAL ) ) )
                    {
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4577:6: ( () ( (lv_value_5_0= RULE_FLOATING_POINT_LITERAL ) ) )
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4577:7: () ( (lv_value_5_0= RULE_FLOATING_POINT_LITERAL ) )
                    {
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4577:7: ()
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4578:5: 
                    {
                    if ( state.backtracking==0 ) {

                              current = forceCreateModelElement(
                                  grammarAccess.getLiteralAccess().getFloatingPointLiteralAction_2_0(),
                                  current);
                          
                    }

                    }

                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4583:2: ( (lv_value_5_0= RULE_FLOATING_POINT_LITERAL ) )
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4584:1: (lv_value_5_0= RULE_FLOATING_POINT_LITERAL )
                    {
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4584:1: (lv_value_5_0= RULE_FLOATING_POINT_LITERAL )
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4585:3: lv_value_5_0= RULE_FLOATING_POINT_LITERAL
                    {
                    lv_value_5_0=(Token)match(input,RULE_FLOATING_POINT_LITERAL,FOLLOW_RULE_FLOATING_POINT_LITERAL_in_ruleLiteral10491); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      			newLeafNode(lv_value_5_0, grammarAccess.getLiteralAccess().getValueFLOATING_POINT_LITERALTerminalRuleCall_2_1_0()); 
                      		
                    }
                    if ( state.backtracking==0 ) {

                      	        if (current==null) {
                      	            current = createModelElement(grammarAccess.getLiteralRule());
                      	        }
                             		setWithLastConsumed(
                             			current, 
                             			"value",
                              		lv_value_5_0, 
                              		"FLOATING_POINT_LITERAL");
                      	    
                    }

                    }


                    }


                    }


                    }
                    break;
                case 4 :
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4602:6: ( () ( (lv_value_7_0= RULE_CHARACTER_LITERAL ) ) )
                    {
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4602:6: ( () ( (lv_value_7_0= RULE_CHARACTER_LITERAL ) ) )
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4602:7: () ( (lv_value_7_0= RULE_CHARACTER_LITERAL ) )
                    {
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4602:7: ()
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4603:5: 
                    {
                    if ( state.backtracking==0 ) {

                              current = forceCreateModelElement(
                                  grammarAccess.getLiteralAccess().getCharacterLiteralAction_3_0(),
                                  current);
                          
                    }

                    }

                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4608:2: ( (lv_value_7_0= RULE_CHARACTER_LITERAL ) )
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4609:1: (lv_value_7_0= RULE_CHARACTER_LITERAL )
                    {
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4609:1: (lv_value_7_0= RULE_CHARACTER_LITERAL )
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4610:3: lv_value_7_0= RULE_CHARACTER_LITERAL
                    {
                    lv_value_7_0=(Token)match(input,RULE_CHARACTER_LITERAL,FOLLOW_RULE_CHARACTER_LITERAL_in_ruleLiteral10530); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      			newLeafNode(lv_value_7_0, grammarAccess.getLiteralAccess().getValueCHARACTER_LITERALTerminalRuleCall_3_1_0()); 
                      		
                    }
                    if ( state.backtracking==0 ) {

                      	        if (current==null) {
                      	            current = createModelElement(grammarAccess.getLiteralRule());
                      	        }
                             		setWithLastConsumed(
                             			current, 
                             			"value",
                              		lv_value_7_0, 
                              		"CHARACTER_LITERAL");
                      	    
                    }

                    }


                    }


                    }


                    }
                    break;
                case 5 :
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4627:6: ( () ( (lv_value_9_0= RULE_STRING_LITERAL ) ) )
                    {
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4627:6: ( () ( (lv_value_9_0= RULE_STRING_LITERAL ) ) )
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4627:7: () ( (lv_value_9_0= RULE_STRING_LITERAL ) )
                    {
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4627:7: ()
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4628:5: 
                    {
                    if ( state.backtracking==0 ) {

                              current = forceCreateModelElement(
                                  grammarAccess.getLiteralAccess().getStringLiteralAction_4_0(),
                                  current);
                          
                    }

                    }

                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4633:2: ( (lv_value_9_0= RULE_STRING_LITERAL ) )
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4634:1: (lv_value_9_0= RULE_STRING_LITERAL )
                    {
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4634:1: (lv_value_9_0= RULE_STRING_LITERAL )
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4635:3: lv_value_9_0= RULE_STRING_LITERAL
                    {
                    lv_value_9_0=(Token)match(input,RULE_STRING_LITERAL,FOLLOW_RULE_STRING_LITERAL_in_ruleLiteral10569); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      			newLeafNode(lv_value_9_0, grammarAccess.getLiteralAccess().getValueSTRING_LITERALTerminalRuleCall_4_1_0()); 
                      		
                    }
                    if ( state.backtracking==0 ) {

                      	        if (current==null) {
                      	            current = createModelElement(grammarAccess.getLiteralRule());
                      	        }
                             		setWithLastConsumed(
                             			current, 
                             			"value",
                              		lv_value_9_0, 
                              		"STRING_LITERAL");
                      	    
                    }

                    }


                    }


                    }


                    }
                    break;
                case 6 :
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4652:6: ( () ( (lv_value_11_0= ruleBooleanLiteral ) ) )
                    {
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4652:6: ( () ( (lv_value_11_0= ruleBooleanLiteral ) ) )
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4652:7: () ( (lv_value_11_0= ruleBooleanLiteral ) )
                    {
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4652:7: ()
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4653:5: 
                    {
                    if ( state.backtracking==0 ) {

                              current = forceCreateModelElement(
                                  grammarAccess.getLiteralAccess().getBooleanLiteralAction_5_0(),
                                  current);
                          
                    }

                    }

                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4658:2: ( (lv_value_11_0= ruleBooleanLiteral ) )
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4659:1: (lv_value_11_0= ruleBooleanLiteral )
                    {
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4659:1: (lv_value_11_0= ruleBooleanLiteral )
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4660:3: lv_value_11_0= ruleBooleanLiteral
                    {
                    if ( state.backtracking==0 ) {
                       
                      	        newCompositeNode(grammarAccess.getLiteralAccess().getValueBooleanLiteralParserRuleCall_5_1_0()); 
                      	    
                    }
                    pushFollow(FOLLOW_ruleBooleanLiteral_in_ruleLiteral10612);
                    lv_value_11_0=ruleBooleanLiteral();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      	        if (current==null) {
                      	            current = createModelElementForParent(grammarAccess.getLiteralRule());
                      	        }
                             		set(
                             			current, 
                             			"value",
                              		lv_value_11_0, 
                              		"BooleanLiteral");
                      	        afterParserOrEnumRuleCall();
                      	    
                    }

                    }


                    }


                    }


                    }
                    break;
                case 7 :
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4677:6: ( () ( (lv_value_13_0= 'null' ) ) )
                    {
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4677:6: ( () ( (lv_value_13_0= 'null' ) ) )
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4677:7: () ( (lv_value_13_0= 'null' ) )
                    {
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4677:7: ()
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4678:5: 
                    {
                    if ( state.backtracking==0 ) {

                              current = forceCreateModelElement(
                                  grammarAccess.getLiteralAccess().getNullLiteralAction_6_0(),
                                  current);
                          
                    }

                    }

                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4683:2: ( (lv_value_13_0= 'null' ) )
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4684:1: (lv_value_13_0= 'null' )
                    {
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4684:1: (lv_value_13_0= 'null' )
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4685:3: lv_value_13_0= 'null'
                    {
                    lv_value_13_0=(Token)match(input,103,FOLLOW_103_in_ruleLiteral10647); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                              newLeafNode(lv_value_13_0, grammarAccess.getLiteralAccess().getValueNullKeyword_6_1_0());
                          
                    }
                    if ( state.backtracking==0 ) {

                      	        if (current==null) {
                      	            current = createModelElement(grammarAccess.getLiteralRule());
                      	        }
                             		setWithLastConsumed(current, "value", lv_value_13_0, "null");
                      	    
                    }

                    }


                    }


                    }


                    }
                    break;

            }


            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleLiteral"


    // $ANTLR start "entryRuleIntegerLiteral"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4706:1: entryRuleIntegerLiteral returns [String current=null] : iv_ruleIntegerLiteral= ruleIntegerLiteral EOF ;
    public final String entryRuleIntegerLiteral() throws RecognitionException {
        String current = null;

        AntlrDatatypeRuleToken iv_ruleIntegerLiteral = null;


        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4707:2: (iv_ruleIntegerLiteral= ruleIntegerLiteral EOF )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4708:2: iv_ruleIntegerLiteral= ruleIntegerLiteral EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getIntegerLiteralRule()); 
            }
            pushFollow(FOLLOW_ruleIntegerLiteral_in_entryRuleIntegerLiteral10698);
            iv_ruleIntegerLiteral=ruleIntegerLiteral();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleIntegerLiteral.getText(); 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRuleIntegerLiteral10709); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleIntegerLiteral"


    // $ANTLR start "ruleIntegerLiteral"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4715:1: ruleIntegerLiteral returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : (this_HEX_LITERAL_0= RULE_HEX_LITERAL | this_OCTAL_LITERAL_1= RULE_OCTAL_LITERAL | this_DECIMAL_LITERAL_2= RULE_DECIMAL_LITERAL ) ;
    public final AntlrDatatypeRuleToken ruleIntegerLiteral() throws RecognitionException {
        AntlrDatatypeRuleToken current = new AntlrDatatypeRuleToken();

        Token this_HEX_LITERAL_0=null;
        Token this_OCTAL_LITERAL_1=null;
        Token this_DECIMAL_LITERAL_2=null;

         enterRule(); 
            
        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4718:28: ( (this_HEX_LITERAL_0= RULE_HEX_LITERAL | this_OCTAL_LITERAL_1= RULE_OCTAL_LITERAL | this_DECIMAL_LITERAL_2= RULE_DECIMAL_LITERAL ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4719:1: (this_HEX_LITERAL_0= RULE_HEX_LITERAL | this_OCTAL_LITERAL_1= RULE_OCTAL_LITERAL | this_DECIMAL_LITERAL_2= RULE_DECIMAL_LITERAL )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4719:1: (this_HEX_LITERAL_0= RULE_HEX_LITERAL | this_OCTAL_LITERAL_1= RULE_OCTAL_LITERAL | this_DECIMAL_LITERAL_2= RULE_DECIMAL_LITERAL )
            int alt73=3;
            switch ( input.LA(1) ) {
            case RULE_HEX_LITERAL:
                {
                alt73=1;
                }
                break;
            case RULE_OCTAL_LITERAL:
                {
                alt73=2;
                }
                break;
            case RULE_DECIMAL_LITERAL:
                {
                alt73=3;
                }
                break;
            default:
                if (state.backtracking>0) {state.failed=true; return current;}
                NoViableAltException nvae =
                    new NoViableAltException("", 73, 0, input);

                throw nvae;
            }

            switch (alt73) {
                case 1 :
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4719:6: this_HEX_LITERAL_0= RULE_HEX_LITERAL
                    {
                    this_HEX_LITERAL_0=(Token)match(input,RULE_HEX_LITERAL,FOLLOW_RULE_HEX_LITERAL_in_ruleIntegerLiteral10749); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      		current.merge(this_HEX_LITERAL_0);
                          
                    }
                    if ( state.backtracking==0 ) {
                       
                          newLeafNode(this_HEX_LITERAL_0, grammarAccess.getIntegerLiteralAccess().getHEX_LITERALTerminalRuleCall_0()); 
                          
                    }

                    }
                    break;
                case 2 :
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4727:10: this_OCTAL_LITERAL_1= RULE_OCTAL_LITERAL
                    {
                    this_OCTAL_LITERAL_1=(Token)match(input,RULE_OCTAL_LITERAL,FOLLOW_RULE_OCTAL_LITERAL_in_ruleIntegerLiteral10775); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      		current.merge(this_OCTAL_LITERAL_1);
                          
                    }
                    if ( state.backtracking==0 ) {
                       
                          newLeafNode(this_OCTAL_LITERAL_1, grammarAccess.getIntegerLiteralAccess().getOCTAL_LITERALTerminalRuleCall_1()); 
                          
                    }

                    }
                    break;
                case 3 :
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4735:10: this_DECIMAL_LITERAL_2= RULE_DECIMAL_LITERAL
                    {
                    this_DECIMAL_LITERAL_2=(Token)match(input,RULE_DECIMAL_LITERAL,FOLLOW_RULE_DECIMAL_LITERAL_in_ruleIntegerLiteral10801); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      		current.merge(this_DECIMAL_LITERAL_2);
                          
                    }
                    if ( state.backtracking==0 ) {
                       
                          newLeafNode(this_DECIMAL_LITERAL_2, grammarAccess.getIntegerLiteralAccess().getDECIMAL_LITERALTerminalRuleCall_2()); 
                          
                    }

                    }
                    break;

            }


            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleIntegerLiteral"


    // $ANTLR start "entryRuleBooleanLiteral"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4750:1: entryRuleBooleanLiteral returns [String current=null] : iv_ruleBooleanLiteral= ruleBooleanLiteral EOF ;
    public final String entryRuleBooleanLiteral() throws RecognitionException {
        String current = null;

        AntlrDatatypeRuleToken iv_ruleBooleanLiteral = null;


        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4751:2: (iv_ruleBooleanLiteral= ruleBooleanLiteral EOF )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4752:2: iv_ruleBooleanLiteral= ruleBooleanLiteral EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getBooleanLiteralRule()); 
            }
            pushFollow(FOLLOW_ruleBooleanLiteral_in_entryRuleBooleanLiteral10847);
            iv_ruleBooleanLiteral=ruleBooleanLiteral();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleBooleanLiteral.getText(); 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRuleBooleanLiteral10858); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleBooleanLiteral"


    // $ANTLR start "ruleBooleanLiteral"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4759:1: ruleBooleanLiteral returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : (kw= 'true' | kw= 'false' ) ;
    public final AntlrDatatypeRuleToken ruleBooleanLiteral() throws RecognitionException {
        AntlrDatatypeRuleToken current = new AntlrDatatypeRuleToken();

        Token kw=null;

         enterRule(); 
            
        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4762:28: ( (kw= 'true' | kw= 'false' ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4763:1: (kw= 'true' | kw= 'false' )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4763:1: (kw= 'true' | kw= 'false' )
            int alt74=2;
            int LA74_0 = input.LA(1);

            if ( (LA74_0==104) ) {
                alt74=1;
            }
            else if ( (LA74_0==105) ) {
                alt74=2;
            }
            else {
                if (state.backtracking>0) {state.failed=true; return current;}
                NoViableAltException nvae =
                    new NoViableAltException("", 74, 0, input);

                throw nvae;
            }
            switch (alt74) {
                case 1 :
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4764:2: kw= 'true'
                    {
                    kw=(Token)match(input,104,FOLLOW_104_in_ruleBooleanLiteral10896); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                              current.merge(kw);
                              newLeafNode(kw, grammarAccess.getBooleanLiteralAccess().getTrueKeyword_0()); 
                          
                    }

                    }
                    break;
                case 2 :
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4771:2: kw= 'false'
                    {
                    kw=(Token)match(input,105,FOLLOW_105_in_ruleBooleanLiteral10915); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                              current.merge(kw);
                              newLeafNode(kw, grammarAccess.getBooleanLiteralAccess().getFalseKeyword_1()); 
                          
                    }

                    }
                    break;

            }


            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleBooleanLiteral"


    // $ANTLR start "entryRuleDE_LHS"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4784:1: entryRuleDE_LHS returns [EObject current=null] : iv_ruleDE_LHS= ruleDE_LHS EOF ;
    public final EObject entryRuleDE_LHS() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleDE_LHS = null;


        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4785:2: (iv_ruleDE_LHS= ruleDE_LHS EOF )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4786:2: iv_ruleDE_LHS= ruleDE_LHS EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getDE_LHSRule()); 
            }
            pushFollow(FOLLOW_ruleDE_LHS_in_entryRuleDE_LHS10955);
            iv_ruleDE_LHS=ruleDE_LHS();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleDE_LHS; 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRuleDE_LHS10965); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleDE_LHS"


    // $ANTLR start "ruleDE_LHS"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4793:1: ruleDE_LHS returns [EObject current=null] : (otherlv_0= 'dot' otherlv_1= '(' ( (lv_var1_2_0= RULE_ID ) ) (otherlv_3= ',' ( (lv_var2_4_0= RULE_ID ) ) )? otherlv_5= ',' ( (lv_order_6_0= ruleIntegerLiteral ) ) otherlv_7= ')' ) ;
    public final EObject ruleDE_LHS() throws RecognitionException {
        EObject current = null;

        Token otherlv_0=null;
        Token otherlv_1=null;
        Token lv_var1_2_0=null;
        Token otherlv_3=null;
        Token lv_var2_4_0=null;
        Token otherlv_5=null;
        Token otherlv_7=null;
        AntlrDatatypeRuleToken lv_order_6_0 = null;


         enterRule(); 
            
        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4796:28: ( (otherlv_0= 'dot' otherlv_1= '(' ( (lv_var1_2_0= RULE_ID ) ) (otherlv_3= ',' ( (lv_var2_4_0= RULE_ID ) ) )? otherlv_5= ',' ( (lv_order_6_0= ruleIntegerLiteral ) ) otherlv_7= ')' ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4797:1: (otherlv_0= 'dot' otherlv_1= '(' ( (lv_var1_2_0= RULE_ID ) ) (otherlv_3= ',' ( (lv_var2_4_0= RULE_ID ) ) )? otherlv_5= ',' ( (lv_order_6_0= ruleIntegerLiteral ) ) otherlv_7= ')' )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4797:1: (otherlv_0= 'dot' otherlv_1= '(' ( (lv_var1_2_0= RULE_ID ) ) (otherlv_3= ',' ( (lv_var2_4_0= RULE_ID ) ) )? otherlv_5= ',' ( (lv_order_6_0= ruleIntegerLiteral ) ) otherlv_7= ')' )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4797:3: otherlv_0= 'dot' otherlv_1= '(' ( (lv_var1_2_0= RULE_ID ) ) (otherlv_3= ',' ( (lv_var2_4_0= RULE_ID ) ) )? otherlv_5= ',' ( (lv_order_6_0= ruleIntegerLiteral ) ) otherlv_7= ')'
            {
            otherlv_0=(Token)match(input,106,FOLLOW_106_in_ruleDE_LHS11002); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_0, grammarAccess.getDE_LHSAccess().getDotKeyword_0());
                  
            }
            otherlv_1=(Token)match(input,52,FOLLOW_52_in_ruleDE_LHS11014); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_1, grammarAccess.getDE_LHSAccess().getLeftParenthesisKeyword_1());
                  
            }
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4805:1: ( (lv_var1_2_0= RULE_ID ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4806:1: (lv_var1_2_0= RULE_ID )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4806:1: (lv_var1_2_0= RULE_ID )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4807:3: lv_var1_2_0= RULE_ID
            {
            lv_var1_2_0=(Token)match(input,RULE_ID,FOLLOW_RULE_ID_in_ruleDE_LHS11031); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(lv_var1_2_0, grammarAccess.getDE_LHSAccess().getVar1IDTerminalRuleCall_2_0()); 
              		
            }
            if ( state.backtracking==0 ) {

              	        if (current==null) {
              	            current = createModelElement(grammarAccess.getDE_LHSRule());
              	        }
                     		setWithLastConsumed(
                     			current, 
                     			"var1",
                      		lv_var1_2_0, 
                      		"ID");
              	    
            }

            }


            }

            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4823:2: (otherlv_3= ',' ( (lv_var2_4_0= RULE_ID ) ) )?
            int alt75=2;
            int LA75_0 = input.LA(1);

            if ( (LA75_0==53) ) {
                int LA75_1 = input.LA(2);

                if ( (LA75_1==RULE_ID) ) {
                    alt75=1;
                }
            }
            switch (alt75) {
                case 1 :
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4823:4: otherlv_3= ',' ( (lv_var2_4_0= RULE_ID ) )
                    {
                    otherlv_3=(Token)match(input,53,FOLLOW_53_in_ruleDE_LHS11049); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                          	newLeafNode(otherlv_3, grammarAccess.getDE_LHSAccess().getCommaKeyword_3_0());
                          
                    }
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4827:1: ( (lv_var2_4_0= RULE_ID ) )
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4828:1: (lv_var2_4_0= RULE_ID )
                    {
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4828:1: (lv_var2_4_0= RULE_ID )
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4829:3: lv_var2_4_0= RULE_ID
                    {
                    lv_var2_4_0=(Token)match(input,RULE_ID,FOLLOW_RULE_ID_in_ruleDE_LHS11066); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      			newLeafNode(lv_var2_4_0, grammarAccess.getDE_LHSAccess().getVar2IDTerminalRuleCall_3_1_0()); 
                      		
                    }
                    if ( state.backtracking==0 ) {

                      	        if (current==null) {
                      	            current = createModelElement(grammarAccess.getDE_LHSRule());
                      	        }
                             		setWithLastConsumed(
                             			current, 
                             			"var2",
                              		lv_var2_4_0, 
                              		"ID");
                      	    
                    }

                    }


                    }


                    }
                    break;

            }

            otherlv_5=(Token)match(input,53,FOLLOW_53_in_ruleDE_LHS11085); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_5, grammarAccess.getDE_LHSAccess().getCommaKeyword_4());
                  
            }
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4849:1: ( (lv_order_6_0= ruleIntegerLiteral ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4850:1: (lv_order_6_0= ruleIntegerLiteral )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4850:1: (lv_order_6_0= ruleIntegerLiteral )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4851:3: lv_order_6_0= ruleIntegerLiteral
            {
            if ( state.backtracking==0 ) {
               
              	        newCompositeNode(grammarAccess.getDE_LHSAccess().getOrderIntegerLiteralParserRuleCall_5_0()); 
              	    
            }
            pushFollow(FOLLOW_ruleIntegerLiteral_in_ruleDE_LHS11106);
            lv_order_6_0=ruleIntegerLiteral();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              	        if (current==null) {
              	            current = createModelElementForParent(grammarAccess.getDE_LHSRule());
              	        }
                     		set(
                     			current, 
                     			"order",
                      		lv_order_6_0, 
                      		"IntegerLiteral");
              	        afterParserOrEnumRuleCall();
              	    
            }

            }


            }

            otherlv_7=(Token)match(input,54,FOLLOW_54_in_ruleDE_LHS11118); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_7, grammarAccess.getDE_LHSAccess().getRightParenthesisKeyword_6());
                  
            }

            }


            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleDE_LHS"


    // $ANTLR start "entryRuleDifferentialEquation"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4879:1: entryRuleDifferentialEquation returns [EObject current=null] : iv_ruleDifferentialEquation= ruleDifferentialEquation EOF ;
    public final EObject entryRuleDifferentialEquation() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleDifferentialEquation = null;


        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4880:2: (iv_ruleDifferentialEquation= ruleDifferentialEquation EOF )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4881:2: iv_ruleDifferentialEquation= ruleDifferentialEquation EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getDifferentialEquationRule()); 
            }
            pushFollow(FOLLOW_ruleDifferentialEquation_in_entryRuleDifferentialEquation11154);
            iv_ruleDifferentialEquation=ruleDifferentialEquation();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleDifferentialEquation; 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRuleDifferentialEquation11164); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleDifferentialEquation"


    // $ANTLR start "ruleDifferentialEquation"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4888:1: ruleDifferentialEquation returns [EObject current=null] : ( (otherlv_0= 'Equation' )? (otherlv_1= ':' )? ( (lv_LHS_2_0= ruleDE_LHS ) ) otherlv_3= '==' ( (lv_RHS_4_0= ruleAdditiveExpression ) ) ) ;
    public final EObject ruleDifferentialEquation() throws RecognitionException {
        EObject current = null;

        Token otherlv_0=null;
        Token otherlv_1=null;
        Token otherlv_3=null;
        EObject lv_LHS_2_0 = null;

        EObject lv_RHS_4_0 = null;


         enterRule(); 
            
        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4891:28: ( ( (otherlv_0= 'Equation' )? (otherlv_1= ':' )? ( (lv_LHS_2_0= ruleDE_LHS ) ) otherlv_3= '==' ( (lv_RHS_4_0= ruleAdditiveExpression ) ) ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4892:1: ( (otherlv_0= 'Equation' )? (otherlv_1= ':' )? ( (lv_LHS_2_0= ruleDE_LHS ) ) otherlv_3= '==' ( (lv_RHS_4_0= ruleAdditiveExpression ) ) )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4892:1: ( (otherlv_0= 'Equation' )? (otherlv_1= ':' )? ( (lv_LHS_2_0= ruleDE_LHS ) ) otherlv_3= '==' ( (lv_RHS_4_0= ruleAdditiveExpression ) ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4892:2: (otherlv_0= 'Equation' )? (otherlv_1= ':' )? ( (lv_LHS_2_0= ruleDE_LHS ) ) otherlv_3= '==' ( (lv_RHS_4_0= ruleAdditiveExpression ) )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4892:2: (otherlv_0= 'Equation' )?
            int alt76=2;
            int LA76_0 = input.LA(1);

            if ( (LA76_0==107) ) {
                alt76=1;
            }
            switch (alt76) {
                case 1 :
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4892:4: otherlv_0= 'Equation'
                    {
                    otherlv_0=(Token)match(input,107,FOLLOW_107_in_ruleDifferentialEquation11202); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                          	newLeafNode(otherlv_0, grammarAccess.getDifferentialEquationAccess().getEquationKeyword_0());
                          
                    }

                    }
                    break;

            }

            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4896:3: (otherlv_1= ':' )?
            int alt77=2;
            int LA77_0 = input.LA(1);

            if ( (LA77_0==59) ) {
                alt77=1;
            }
            switch (alt77) {
                case 1 :
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4896:5: otherlv_1= ':'
                    {
                    otherlv_1=(Token)match(input,59,FOLLOW_59_in_ruleDifferentialEquation11217); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                          	newLeafNode(otherlv_1, grammarAccess.getDifferentialEquationAccess().getColonKeyword_1());
                          
                    }

                    }
                    break;

            }

            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4900:3: ( (lv_LHS_2_0= ruleDE_LHS ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4901:1: (lv_LHS_2_0= ruleDE_LHS )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4901:1: (lv_LHS_2_0= ruleDE_LHS )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4902:3: lv_LHS_2_0= ruleDE_LHS
            {
            if ( state.backtracking==0 ) {
               
              	        newCompositeNode(grammarAccess.getDifferentialEquationAccess().getLHSDE_LHSParserRuleCall_2_0()); 
              	    
            }
            pushFollow(FOLLOW_ruleDE_LHS_in_ruleDifferentialEquation11240);
            lv_LHS_2_0=ruleDE_LHS();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              	        if (current==null) {
              	            current = createModelElementForParent(grammarAccess.getDifferentialEquationRule());
              	        }
                     		set(
                     			current, 
                     			"LHS",
                      		lv_LHS_2_0, 
                      		"DE_LHS");
              	        afterParserOrEnumRuleCall();
              	    
            }

            }


            }

            otherlv_3=(Token)match(input,79,FOLLOW_79_in_ruleDifferentialEquation11252); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_3, grammarAccess.getDifferentialEquationAccess().getEqualsSignEqualsSignKeyword_3());
                  
            }
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4922:1: ( (lv_RHS_4_0= ruleAdditiveExpression ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4923:1: (lv_RHS_4_0= ruleAdditiveExpression )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4923:1: (lv_RHS_4_0= ruleAdditiveExpression )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4924:3: lv_RHS_4_0= ruleAdditiveExpression
            {
            if ( state.backtracking==0 ) {
               
              	        newCompositeNode(grammarAccess.getDifferentialEquationAccess().getRHSAdditiveExpressionParserRuleCall_4_0()); 
              	    
            }
            pushFollow(FOLLOW_ruleAdditiveExpression_in_ruleDifferentialEquation11273);
            lv_RHS_4_0=ruleAdditiveExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              	        if (current==null) {
              	            current = createModelElementForParent(grammarAccess.getDifferentialEquationRule());
              	        }
                     		set(
                     			current, 
                     			"RHS",
                      		lv_RHS_4_0, 
                      		"AdditiveExpression");
              	        afterParserOrEnumRuleCall();
              	    
            }

            }


            }


            }


            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleDifferentialEquation"


    // $ANTLR start "entryRuleContinuousMethod"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4948:1: entryRuleContinuousMethod returns [EObject current=null] : iv_ruleContinuousMethod= ruleContinuousMethod EOF ;
    public final EObject entryRuleContinuousMethod() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleContinuousMethod = null;


        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4949:2: (iv_ruleContinuousMethod= ruleContinuousMethod EOF )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4950:2: iv_ruleContinuousMethod= ruleContinuousMethod EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getContinuousMethodRule()); 
            }
            pushFollow(FOLLOW_ruleContinuousMethod_in_entryRuleContinuousMethod11309);
            iv_ruleContinuousMethod=ruleContinuousMethod();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleContinuousMethod; 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRuleContinuousMethod11319); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleContinuousMethod"


    // $ANTLR start "ruleContinuousMethod"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4957:1: ruleContinuousMethod returns [EObject current=null] : ( () otherlv_1= 'void' ( (lv_name_2_0= 'Continuous' ) ) otherlv_3= '(' otherlv_4= ')' otherlv_5= '{' ( ( (lv_DES_6_0= ruleDifferentialEquation ) ) otherlv_7= ';' )* otherlv_8= '}' ) ;
    public final EObject ruleContinuousMethod() throws RecognitionException {
        EObject current = null;

        Token otherlv_1=null;
        Token lv_name_2_0=null;
        Token otherlv_3=null;
        Token otherlv_4=null;
        Token otherlv_5=null;
        Token otherlv_7=null;
        Token otherlv_8=null;
        EObject lv_DES_6_0 = null;


         enterRule(); 
            
        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4960:28: ( ( () otherlv_1= 'void' ( (lv_name_2_0= 'Continuous' ) ) otherlv_3= '(' otherlv_4= ')' otherlv_5= '{' ( ( (lv_DES_6_0= ruleDifferentialEquation ) ) otherlv_7= ';' )* otherlv_8= '}' ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4961:1: ( () otherlv_1= 'void' ( (lv_name_2_0= 'Continuous' ) ) otherlv_3= '(' otherlv_4= ')' otherlv_5= '{' ( ( (lv_DES_6_0= ruleDifferentialEquation ) ) otherlv_7= ';' )* otherlv_8= '}' )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4961:1: ( () otherlv_1= 'void' ( (lv_name_2_0= 'Continuous' ) ) otherlv_3= '(' otherlv_4= ')' otherlv_5= '{' ( ( (lv_DES_6_0= ruleDifferentialEquation ) ) otherlv_7= ';' )* otherlv_8= '}' )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4961:2: () otherlv_1= 'void' ( (lv_name_2_0= 'Continuous' ) ) otherlv_3= '(' otherlv_4= ')' otherlv_5= '{' ( ( (lv_DES_6_0= ruleDifferentialEquation ) ) otherlv_7= ';' )* otherlv_8= '}'
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4961:2: ()
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4962:5: 
            {
            if ( state.backtracking==0 ) {

                      current = forceCreateModelElement(
                          grammarAccess.getContinuousMethodAccess().getContinuousMethodAction_0(),
                          current);
                  
            }

            }

            otherlv_1=(Token)match(input,37,FOLLOW_37_in_ruleContinuousMethod11365); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_1, grammarAccess.getContinuousMethodAccess().getVoidKeyword_1());
                  
            }
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4971:1: ( (lv_name_2_0= 'Continuous' ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4972:1: (lv_name_2_0= 'Continuous' )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4972:1: (lv_name_2_0= 'Continuous' )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4973:3: lv_name_2_0= 'Continuous'
            {
            lv_name_2_0=(Token)match(input,108,FOLLOW_108_in_ruleContinuousMethod11383); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                      newLeafNode(lv_name_2_0, grammarAccess.getContinuousMethodAccess().getNameContinuousKeyword_2_0());
                  
            }
            if ( state.backtracking==0 ) {

              	        if (current==null) {
              	            current = createModelElement(grammarAccess.getContinuousMethodRule());
              	        }
                     		setWithLastConsumed(current, "name", lv_name_2_0, "Continuous");
              	    
            }

            }


            }

            otherlv_3=(Token)match(input,52,FOLLOW_52_in_ruleContinuousMethod11408); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_3, grammarAccess.getContinuousMethodAccess().getLeftParenthesisKeyword_3());
                  
            }
            otherlv_4=(Token)match(input,54,FOLLOW_54_in_ruleContinuousMethod11420); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_4, grammarAccess.getContinuousMethodAccess().getRightParenthesisKeyword_4());
                  
            }
            otherlv_5=(Token)match(input,47,FOLLOW_47_in_ruleContinuousMethod11432); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_5, grammarAccess.getContinuousMethodAccess().getLeftCurlyBracketKeyword_5());
                  
            }
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4998:1: ( ( (lv_DES_6_0= ruleDifferentialEquation ) ) otherlv_7= ';' )*
            loop78:
            do {
                int alt78=2;
                int LA78_0 = input.LA(1);

                if ( (LA78_0==59||(LA78_0>=106 && LA78_0<=107)) ) {
                    alt78=1;
                }


                switch (alt78) {
            	case 1 :
            	    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4998:2: ( (lv_DES_6_0= ruleDifferentialEquation ) ) otherlv_7= ';'
            	    {
            	    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4998:2: ( (lv_DES_6_0= ruleDifferentialEquation ) )
            	    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4999:1: (lv_DES_6_0= ruleDifferentialEquation )
            	    {
            	    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4999:1: (lv_DES_6_0= ruleDifferentialEquation )
            	    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:5000:3: lv_DES_6_0= ruleDifferentialEquation
            	    {
            	    if ( state.backtracking==0 ) {
            	       
            	      	        newCompositeNode(grammarAccess.getContinuousMethodAccess().getDESDifferentialEquationParserRuleCall_6_0_0()); 
            	      	    
            	    }
            	    pushFollow(FOLLOW_ruleDifferentialEquation_in_ruleContinuousMethod11454);
            	    lv_DES_6_0=ruleDifferentialEquation();

            	    state._fsp--;
            	    if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      	        if (current==null) {
            	      	            current = createModelElementForParent(grammarAccess.getContinuousMethodRule());
            	      	        }
            	             		add(
            	             			current, 
            	             			"DES",
            	              		lv_DES_6_0, 
            	              		"DifferentialEquation");
            	      	        afterParserOrEnumRuleCall();
            	      	    
            	    }

            	    }


            	    }

            	    otherlv_7=(Token)match(input,29,FOLLOW_29_in_ruleContinuousMethod11466); if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	          	newLeafNode(otherlv_7, grammarAccess.getContinuousMethodAccess().getSemicolonKeyword_6_1());
            	          
            	    }

            	    }
            	    break;

            	default :
            	    break loop78;
                }
            } while (true);

            otherlv_8=(Token)match(input,48,FOLLOW_48_in_ruleContinuousMethod11480); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_8, grammarAccess.getContinuousMethodAccess().getRightCurlyBracketKeyword_7());
                  
            }

            }


            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleContinuousMethod"


    // $ANTLR start "entryRuleAbstractContinuousMethod"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:5032:1: entryRuleAbstractContinuousMethod returns [EObject current=null] : iv_ruleAbstractContinuousMethod= ruleAbstractContinuousMethod EOF ;
    public final EObject entryRuleAbstractContinuousMethod() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleAbstractContinuousMethod = null;


        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:5033:2: (iv_ruleAbstractContinuousMethod= ruleAbstractContinuousMethod EOF )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:5034:2: iv_ruleAbstractContinuousMethod= ruleAbstractContinuousMethod EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getAbstractContinuousMethodRule()); 
            }
            pushFollow(FOLLOW_ruleAbstractContinuousMethod_in_entryRuleAbstractContinuousMethod11516);
            iv_ruleAbstractContinuousMethod=ruleAbstractContinuousMethod();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleAbstractContinuousMethod; 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRuleAbstractContinuousMethod11526); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleAbstractContinuousMethod"


    // $ANTLR start "ruleAbstractContinuousMethod"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:5041:1: ruleAbstractContinuousMethod returns [EObject current=null] : ( () otherlv_1= 'void' ( (lv_name_2_0= 'Continuous' ) ) otherlv_3= '(' otherlv_4= ')' otherlv_5= ';' ) ;
    public final EObject ruleAbstractContinuousMethod() throws RecognitionException {
        EObject current = null;

        Token otherlv_1=null;
        Token lv_name_2_0=null;
        Token otherlv_3=null;
        Token otherlv_4=null;
        Token otherlv_5=null;

         enterRule(); 
            
        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:5044:28: ( ( () otherlv_1= 'void' ( (lv_name_2_0= 'Continuous' ) ) otherlv_3= '(' otherlv_4= ')' otherlv_5= ';' ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:5045:1: ( () otherlv_1= 'void' ( (lv_name_2_0= 'Continuous' ) ) otherlv_3= '(' otherlv_4= ')' otherlv_5= ';' )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:5045:1: ( () otherlv_1= 'void' ( (lv_name_2_0= 'Continuous' ) ) otherlv_3= '(' otherlv_4= ')' otherlv_5= ';' )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:5045:2: () otherlv_1= 'void' ( (lv_name_2_0= 'Continuous' ) ) otherlv_3= '(' otherlv_4= ')' otherlv_5= ';'
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:5045:2: ()
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:5046:5: 
            {
            if ( state.backtracking==0 ) {

                      current = forceCreateModelElement(
                          grammarAccess.getAbstractContinuousMethodAccess().getAbstractContinuousMethodAction_0(),
                          current);
                  
            }

            }

            otherlv_1=(Token)match(input,37,FOLLOW_37_in_ruleAbstractContinuousMethod11572); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_1, grammarAccess.getAbstractContinuousMethodAccess().getVoidKeyword_1());
                  
            }
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:5055:1: ( (lv_name_2_0= 'Continuous' ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:5056:1: (lv_name_2_0= 'Continuous' )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:5056:1: (lv_name_2_0= 'Continuous' )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:5057:3: lv_name_2_0= 'Continuous'
            {
            lv_name_2_0=(Token)match(input,108,FOLLOW_108_in_ruleAbstractContinuousMethod11590); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                      newLeafNode(lv_name_2_0, grammarAccess.getAbstractContinuousMethodAccess().getNameContinuousKeyword_2_0());
                  
            }
            if ( state.backtracking==0 ) {

              	        if (current==null) {
              	            current = createModelElement(grammarAccess.getAbstractContinuousMethodRule());
              	        }
                     		setWithLastConsumed(current, "name", lv_name_2_0, "Continuous");
              	    
            }

            }


            }

            otherlv_3=(Token)match(input,52,FOLLOW_52_in_ruleAbstractContinuousMethod11615); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_3, grammarAccess.getAbstractContinuousMethodAccess().getLeftParenthesisKeyword_3());
                  
            }
            otherlv_4=(Token)match(input,54,FOLLOW_54_in_ruleAbstractContinuousMethod11627); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_4, grammarAccess.getAbstractContinuousMethodAccess().getRightParenthesisKeyword_4());
                  
            }
            otherlv_5=(Token)match(input,29,FOLLOW_29_in_ruleAbstractContinuousMethod11639); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_5, grammarAccess.getAbstractContinuousMethodAccess().getSemicolonKeyword_5());
                  
            }

            }


            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleAbstractContinuousMethod"


    // $ANTLR start "entryRuleBuilt_In_Methods"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:5090:1: entryRuleBuilt_In_Methods returns [EObject current=null] : iv_ruleBuilt_In_Methods= ruleBuilt_In_Methods EOF ;
    public final EObject entryRuleBuilt_In_Methods() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleBuilt_In_Methods = null;


        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:5091:2: (iv_ruleBuilt_In_Methods= ruleBuilt_In_Methods EOF )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:5092:2: iv_ruleBuilt_In_Methods= ruleBuilt_In_Methods EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getBuilt_In_MethodsRule()); 
            }
            pushFollow(FOLLOW_ruleBuilt_In_Methods_in_entryRuleBuilt_In_Methods11675);
            iv_ruleBuilt_In_Methods=ruleBuilt_In_Methods();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleBuilt_In_Methods; 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRuleBuilt_In_Methods11685); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleBuilt_In_Methods"


    // $ANTLR start "ruleBuilt_In_Methods"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:5099:1: ruleBuilt_In_Methods returns [EObject current=null] : (this_Sqrt_0= ruleSqrt | this_Sin_1= ruleSin | this_Cos_2= ruleCos | this_Tan_3= ruleTan | this_Cot_4= ruleCot | this_Sec_5= ruleSec | this_Csc_6= ruleCsc | this_Round_7= ruleRound | this_Floor_8= ruleFloor | this_Ceil_9= ruleCeil | this_Div_10= ruleDiv | this_Fld_11= ruleFld | this_Rem_12= ruleRem | this_Mod_13= ruleMod | this_Gcd_14= ruleGcd | this_Lcm_15= ruleLcm | this_Abs_16= ruleAbs | this_Sign_17= ruleSign | this_Root_18= ruleRoot | this_Hypot_19= ruleHypot | this_Pow_20= rulePow | this_Exp_21= ruleExp | this_Log_22= ruleLog | this_Erf_23= ruleErf | this_Gamma_24= ruleGamma | this_Max_25= ruleMax | this_Min_26= ruleMin | this_Pause_27= rulePause | this_DE_LHS_28= ruleDE_LHS | this_Size_29= ruleSize ) ;
    public final EObject ruleBuilt_In_Methods() throws RecognitionException {
        EObject current = null;

        EObject this_Sqrt_0 = null;

        EObject this_Sin_1 = null;

        EObject this_Cos_2 = null;

        EObject this_Tan_3 = null;

        EObject this_Cot_4 = null;

        EObject this_Sec_5 = null;

        EObject this_Csc_6 = null;

        EObject this_Round_7 = null;

        EObject this_Floor_8 = null;

        EObject this_Ceil_9 = null;

        EObject this_Div_10 = null;

        EObject this_Fld_11 = null;

        EObject this_Rem_12 = null;

        EObject this_Mod_13 = null;

        EObject this_Gcd_14 = null;

        EObject this_Lcm_15 = null;

        EObject this_Abs_16 = null;

        EObject this_Sign_17 = null;

        EObject this_Root_18 = null;

        EObject this_Hypot_19 = null;

        EObject this_Pow_20 = null;

        EObject this_Exp_21 = null;

        EObject this_Log_22 = null;

        EObject this_Erf_23 = null;

        EObject this_Gamma_24 = null;

        EObject this_Max_25 = null;

        EObject this_Min_26 = null;

        EObject this_Pause_27 = null;

        EObject this_DE_LHS_28 = null;

        EObject this_Size_29 = null;


         enterRule(); 
            
        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:5102:28: ( (this_Sqrt_0= ruleSqrt | this_Sin_1= ruleSin | this_Cos_2= ruleCos | this_Tan_3= ruleTan | this_Cot_4= ruleCot | this_Sec_5= ruleSec | this_Csc_6= ruleCsc | this_Round_7= ruleRound | this_Floor_8= ruleFloor | this_Ceil_9= ruleCeil | this_Div_10= ruleDiv | this_Fld_11= ruleFld | this_Rem_12= ruleRem | this_Mod_13= ruleMod | this_Gcd_14= ruleGcd | this_Lcm_15= ruleLcm | this_Abs_16= ruleAbs | this_Sign_17= ruleSign | this_Root_18= ruleRoot | this_Hypot_19= ruleHypot | this_Pow_20= rulePow | this_Exp_21= ruleExp | this_Log_22= ruleLog | this_Erf_23= ruleErf | this_Gamma_24= ruleGamma | this_Max_25= ruleMax | this_Min_26= ruleMin | this_Pause_27= rulePause | this_DE_LHS_28= ruleDE_LHS | this_Size_29= ruleSize ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:5103:1: (this_Sqrt_0= ruleSqrt | this_Sin_1= ruleSin | this_Cos_2= ruleCos | this_Tan_3= ruleTan | this_Cot_4= ruleCot | this_Sec_5= ruleSec | this_Csc_6= ruleCsc | this_Round_7= ruleRound | this_Floor_8= ruleFloor | this_Ceil_9= ruleCeil | this_Div_10= ruleDiv | this_Fld_11= ruleFld | this_Rem_12= ruleRem | this_Mod_13= ruleMod | this_Gcd_14= ruleGcd | this_Lcm_15= ruleLcm | this_Abs_16= ruleAbs | this_Sign_17= ruleSign | this_Root_18= ruleRoot | this_Hypot_19= ruleHypot | this_Pow_20= rulePow | this_Exp_21= ruleExp | this_Log_22= ruleLog | this_Erf_23= ruleErf | this_Gamma_24= ruleGamma | this_Max_25= ruleMax | this_Min_26= ruleMin | this_Pause_27= rulePause | this_DE_LHS_28= ruleDE_LHS | this_Size_29= ruleSize )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:5103:1: (this_Sqrt_0= ruleSqrt | this_Sin_1= ruleSin | this_Cos_2= ruleCos | this_Tan_3= ruleTan | this_Cot_4= ruleCot | this_Sec_5= ruleSec | this_Csc_6= ruleCsc | this_Round_7= ruleRound | this_Floor_8= ruleFloor | this_Ceil_9= ruleCeil | this_Div_10= ruleDiv | this_Fld_11= ruleFld | this_Rem_12= ruleRem | this_Mod_13= ruleMod | this_Gcd_14= ruleGcd | this_Lcm_15= ruleLcm | this_Abs_16= ruleAbs | this_Sign_17= ruleSign | this_Root_18= ruleRoot | this_Hypot_19= ruleHypot | this_Pow_20= rulePow | this_Exp_21= ruleExp | this_Log_22= ruleLog | this_Erf_23= ruleErf | this_Gamma_24= ruleGamma | this_Max_25= ruleMax | this_Min_26= ruleMin | this_Pause_27= rulePause | this_DE_LHS_28= ruleDE_LHS | this_Size_29= ruleSize )
            int alt79=30;
            switch ( input.LA(1) ) {
            case 109:
                {
                alt79=1;
                }
                break;
            case 110:
                {
                alt79=2;
                }
                break;
            case 111:
                {
                alt79=3;
                }
                break;
            case 112:
                {
                alt79=4;
                }
                break;
            case 113:
                {
                alt79=5;
                }
                break;
            case 114:
                {
                alt79=6;
                }
                break;
            case 115:
                {
                alt79=7;
                }
                break;
            case 116:
                {
                alt79=8;
                }
                break;
            case 117:
                {
                alt79=9;
                }
                break;
            case 118:
                {
                alt79=10;
                }
                break;
            case 119:
                {
                alt79=11;
                }
                break;
            case 120:
                {
                alt79=12;
                }
                break;
            case 121:
                {
                alt79=13;
                }
                break;
            case 122:
                {
                alt79=14;
                }
                break;
            case 123:
                {
                alt79=15;
                }
                break;
            case 124:
                {
                alt79=16;
                }
                break;
            case 125:
                {
                alt79=17;
                }
                break;
            case 126:
                {
                alt79=18;
                }
                break;
            case 127:
                {
                alt79=19;
                }
                break;
            case 128:
                {
                alt79=20;
                }
                break;
            case 129:
                {
                alt79=21;
                }
                break;
            case 130:
                {
                alt79=22;
                }
                break;
            case 131:
                {
                alt79=23;
                }
                break;
            case 132:
                {
                alt79=24;
                }
                break;
            case 133:
                {
                alt79=25;
                }
                break;
            case 134:
                {
                alt79=26;
                }
                break;
            case 135:
                {
                alt79=27;
                }
                break;
            case 136:
                {
                alt79=28;
                }
                break;
            case 106:
                {
                alt79=29;
                }
                break;
            case 137:
                {
                alt79=30;
                }
                break;
            default:
                if (state.backtracking>0) {state.failed=true; return current;}
                NoViableAltException nvae =
                    new NoViableAltException("", 79, 0, input);

                throw nvae;
            }

            switch (alt79) {
                case 1 :
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:5104:5: this_Sqrt_0= ruleSqrt
                    {
                    if ( state.backtracking==0 ) {
                       
                              newCompositeNode(grammarAccess.getBuilt_In_MethodsAccess().getSqrtParserRuleCall_0()); 
                          
                    }
                    pushFollow(FOLLOW_ruleSqrt_in_ruleBuilt_In_Methods11732);
                    this_Sqrt_0=ruleSqrt();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {
                       
                              current = this_Sqrt_0; 
                              afterParserOrEnumRuleCall();
                          
                    }

                    }
                    break;
                case 2 :
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:5114:5: this_Sin_1= ruleSin
                    {
                    if ( state.backtracking==0 ) {
                       
                              newCompositeNode(grammarAccess.getBuilt_In_MethodsAccess().getSinParserRuleCall_1()); 
                          
                    }
                    pushFollow(FOLLOW_ruleSin_in_ruleBuilt_In_Methods11759);
                    this_Sin_1=ruleSin();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {
                       
                              current = this_Sin_1; 
                              afterParserOrEnumRuleCall();
                          
                    }

                    }
                    break;
                case 3 :
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:5124:5: this_Cos_2= ruleCos
                    {
                    if ( state.backtracking==0 ) {
                       
                              newCompositeNode(grammarAccess.getBuilt_In_MethodsAccess().getCosParserRuleCall_2()); 
                          
                    }
                    pushFollow(FOLLOW_ruleCos_in_ruleBuilt_In_Methods11786);
                    this_Cos_2=ruleCos();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {
                       
                              current = this_Cos_2; 
                              afterParserOrEnumRuleCall();
                          
                    }

                    }
                    break;
                case 4 :
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:5134:5: this_Tan_3= ruleTan
                    {
                    if ( state.backtracking==0 ) {
                       
                              newCompositeNode(grammarAccess.getBuilt_In_MethodsAccess().getTanParserRuleCall_3()); 
                          
                    }
                    pushFollow(FOLLOW_ruleTan_in_ruleBuilt_In_Methods11813);
                    this_Tan_3=ruleTan();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {
                       
                              current = this_Tan_3; 
                              afterParserOrEnumRuleCall();
                          
                    }

                    }
                    break;
                case 5 :
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:5144:5: this_Cot_4= ruleCot
                    {
                    if ( state.backtracking==0 ) {
                       
                              newCompositeNode(grammarAccess.getBuilt_In_MethodsAccess().getCotParserRuleCall_4()); 
                          
                    }
                    pushFollow(FOLLOW_ruleCot_in_ruleBuilt_In_Methods11840);
                    this_Cot_4=ruleCot();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {
                       
                              current = this_Cot_4; 
                              afterParserOrEnumRuleCall();
                          
                    }

                    }
                    break;
                case 6 :
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:5154:5: this_Sec_5= ruleSec
                    {
                    if ( state.backtracking==0 ) {
                       
                              newCompositeNode(grammarAccess.getBuilt_In_MethodsAccess().getSecParserRuleCall_5()); 
                          
                    }
                    pushFollow(FOLLOW_ruleSec_in_ruleBuilt_In_Methods11867);
                    this_Sec_5=ruleSec();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {
                       
                              current = this_Sec_5; 
                              afterParserOrEnumRuleCall();
                          
                    }

                    }
                    break;
                case 7 :
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:5164:5: this_Csc_6= ruleCsc
                    {
                    if ( state.backtracking==0 ) {
                       
                              newCompositeNode(grammarAccess.getBuilt_In_MethodsAccess().getCscParserRuleCall_6()); 
                          
                    }
                    pushFollow(FOLLOW_ruleCsc_in_ruleBuilt_In_Methods11894);
                    this_Csc_6=ruleCsc();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {
                       
                              current = this_Csc_6; 
                              afterParserOrEnumRuleCall();
                          
                    }

                    }
                    break;
                case 8 :
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:5174:5: this_Round_7= ruleRound
                    {
                    if ( state.backtracking==0 ) {
                       
                              newCompositeNode(grammarAccess.getBuilt_In_MethodsAccess().getRoundParserRuleCall_7()); 
                          
                    }
                    pushFollow(FOLLOW_ruleRound_in_ruleBuilt_In_Methods11921);
                    this_Round_7=ruleRound();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {
                       
                              current = this_Round_7; 
                              afterParserOrEnumRuleCall();
                          
                    }

                    }
                    break;
                case 9 :
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:5184:5: this_Floor_8= ruleFloor
                    {
                    if ( state.backtracking==0 ) {
                       
                              newCompositeNode(grammarAccess.getBuilt_In_MethodsAccess().getFloorParserRuleCall_8()); 
                          
                    }
                    pushFollow(FOLLOW_ruleFloor_in_ruleBuilt_In_Methods11948);
                    this_Floor_8=ruleFloor();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {
                       
                              current = this_Floor_8; 
                              afterParserOrEnumRuleCall();
                          
                    }

                    }
                    break;
                case 10 :
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:5194:5: this_Ceil_9= ruleCeil
                    {
                    if ( state.backtracking==0 ) {
                       
                              newCompositeNode(grammarAccess.getBuilt_In_MethodsAccess().getCeilParserRuleCall_9()); 
                          
                    }
                    pushFollow(FOLLOW_ruleCeil_in_ruleBuilt_In_Methods11975);
                    this_Ceil_9=ruleCeil();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {
                       
                              current = this_Ceil_9; 
                              afterParserOrEnumRuleCall();
                          
                    }

                    }
                    break;
                case 11 :
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:5204:5: this_Div_10= ruleDiv
                    {
                    if ( state.backtracking==0 ) {
                       
                              newCompositeNode(grammarAccess.getBuilt_In_MethodsAccess().getDivParserRuleCall_10()); 
                          
                    }
                    pushFollow(FOLLOW_ruleDiv_in_ruleBuilt_In_Methods12002);
                    this_Div_10=ruleDiv();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {
                       
                              current = this_Div_10; 
                              afterParserOrEnumRuleCall();
                          
                    }

                    }
                    break;
                case 12 :
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:5214:5: this_Fld_11= ruleFld
                    {
                    if ( state.backtracking==0 ) {
                       
                              newCompositeNode(grammarAccess.getBuilt_In_MethodsAccess().getFldParserRuleCall_11()); 
                          
                    }
                    pushFollow(FOLLOW_ruleFld_in_ruleBuilt_In_Methods12029);
                    this_Fld_11=ruleFld();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {
                       
                              current = this_Fld_11; 
                              afterParserOrEnumRuleCall();
                          
                    }

                    }
                    break;
                case 13 :
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:5224:5: this_Rem_12= ruleRem
                    {
                    if ( state.backtracking==0 ) {
                       
                              newCompositeNode(grammarAccess.getBuilt_In_MethodsAccess().getRemParserRuleCall_12()); 
                          
                    }
                    pushFollow(FOLLOW_ruleRem_in_ruleBuilt_In_Methods12056);
                    this_Rem_12=ruleRem();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {
                       
                              current = this_Rem_12; 
                              afterParserOrEnumRuleCall();
                          
                    }

                    }
                    break;
                case 14 :
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:5234:5: this_Mod_13= ruleMod
                    {
                    if ( state.backtracking==0 ) {
                       
                              newCompositeNode(grammarAccess.getBuilt_In_MethodsAccess().getModParserRuleCall_13()); 
                          
                    }
                    pushFollow(FOLLOW_ruleMod_in_ruleBuilt_In_Methods12083);
                    this_Mod_13=ruleMod();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {
                       
                              current = this_Mod_13; 
                              afterParserOrEnumRuleCall();
                          
                    }

                    }
                    break;
                case 15 :
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:5244:5: this_Gcd_14= ruleGcd
                    {
                    if ( state.backtracking==0 ) {
                       
                              newCompositeNode(grammarAccess.getBuilt_In_MethodsAccess().getGcdParserRuleCall_14()); 
                          
                    }
                    pushFollow(FOLLOW_ruleGcd_in_ruleBuilt_In_Methods12110);
                    this_Gcd_14=ruleGcd();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {
                       
                              current = this_Gcd_14; 
                              afterParserOrEnumRuleCall();
                          
                    }

                    }
                    break;
                case 16 :
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:5254:5: this_Lcm_15= ruleLcm
                    {
                    if ( state.backtracking==0 ) {
                       
                              newCompositeNode(grammarAccess.getBuilt_In_MethodsAccess().getLcmParserRuleCall_15()); 
                          
                    }
                    pushFollow(FOLLOW_ruleLcm_in_ruleBuilt_In_Methods12137);
                    this_Lcm_15=ruleLcm();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {
                       
                              current = this_Lcm_15; 
                              afterParserOrEnumRuleCall();
                          
                    }

                    }
                    break;
                case 17 :
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:5264:5: this_Abs_16= ruleAbs
                    {
                    if ( state.backtracking==0 ) {
                       
                              newCompositeNode(grammarAccess.getBuilt_In_MethodsAccess().getAbsParserRuleCall_16()); 
                          
                    }
                    pushFollow(FOLLOW_ruleAbs_in_ruleBuilt_In_Methods12164);
                    this_Abs_16=ruleAbs();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {
                       
                              current = this_Abs_16; 
                              afterParserOrEnumRuleCall();
                          
                    }

                    }
                    break;
                case 18 :
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:5274:5: this_Sign_17= ruleSign
                    {
                    if ( state.backtracking==0 ) {
                       
                              newCompositeNode(grammarAccess.getBuilt_In_MethodsAccess().getSignParserRuleCall_17()); 
                          
                    }
                    pushFollow(FOLLOW_ruleSign_in_ruleBuilt_In_Methods12191);
                    this_Sign_17=ruleSign();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {
                       
                              current = this_Sign_17; 
                              afterParserOrEnumRuleCall();
                          
                    }

                    }
                    break;
                case 19 :
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:5284:5: this_Root_18= ruleRoot
                    {
                    if ( state.backtracking==0 ) {
                       
                              newCompositeNode(grammarAccess.getBuilt_In_MethodsAccess().getRootParserRuleCall_18()); 
                          
                    }
                    pushFollow(FOLLOW_ruleRoot_in_ruleBuilt_In_Methods12218);
                    this_Root_18=ruleRoot();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {
                       
                              current = this_Root_18; 
                              afterParserOrEnumRuleCall();
                          
                    }

                    }
                    break;
                case 20 :
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:5294:5: this_Hypot_19= ruleHypot
                    {
                    if ( state.backtracking==0 ) {
                       
                              newCompositeNode(grammarAccess.getBuilt_In_MethodsAccess().getHypotParserRuleCall_19()); 
                          
                    }
                    pushFollow(FOLLOW_ruleHypot_in_ruleBuilt_In_Methods12245);
                    this_Hypot_19=ruleHypot();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {
                       
                              current = this_Hypot_19; 
                              afterParserOrEnumRuleCall();
                          
                    }

                    }
                    break;
                case 21 :
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:5304:5: this_Pow_20= rulePow
                    {
                    if ( state.backtracking==0 ) {
                       
                              newCompositeNode(grammarAccess.getBuilt_In_MethodsAccess().getPowParserRuleCall_20()); 
                          
                    }
                    pushFollow(FOLLOW_rulePow_in_ruleBuilt_In_Methods12272);
                    this_Pow_20=rulePow();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {
                       
                              current = this_Pow_20; 
                              afterParserOrEnumRuleCall();
                          
                    }

                    }
                    break;
                case 22 :
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:5314:5: this_Exp_21= ruleExp
                    {
                    if ( state.backtracking==0 ) {
                       
                              newCompositeNode(grammarAccess.getBuilt_In_MethodsAccess().getExpParserRuleCall_21()); 
                          
                    }
                    pushFollow(FOLLOW_ruleExp_in_ruleBuilt_In_Methods12299);
                    this_Exp_21=ruleExp();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {
                       
                              current = this_Exp_21; 
                              afterParserOrEnumRuleCall();
                          
                    }

                    }
                    break;
                case 23 :
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:5324:5: this_Log_22= ruleLog
                    {
                    if ( state.backtracking==0 ) {
                       
                              newCompositeNode(grammarAccess.getBuilt_In_MethodsAccess().getLogParserRuleCall_22()); 
                          
                    }
                    pushFollow(FOLLOW_ruleLog_in_ruleBuilt_In_Methods12326);
                    this_Log_22=ruleLog();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {
                       
                              current = this_Log_22; 
                              afterParserOrEnumRuleCall();
                          
                    }

                    }
                    break;
                case 24 :
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:5334:5: this_Erf_23= ruleErf
                    {
                    if ( state.backtracking==0 ) {
                       
                              newCompositeNode(grammarAccess.getBuilt_In_MethodsAccess().getErfParserRuleCall_23()); 
                          
                    }
                    pushFollow(FOLLOW_ruleErf_in_ruleBuilt_In_Methods12353);
                    this_Erf_23=ruleErf();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {
                       
                              current = this_Erf_23; 
                              afterParserOrEnumRuleCall();
                          
                    }

                    }
                    break;
                case 25 :
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:5344:5: this_Gamma_24= ruleGamma
                    {
                    if ( state.backtracking==0 ) {
                       
                              newCompositeNode(grammarAccess.getBuilt_In_MethodsAccess().getGammaParserRuleCall_24()); 
                          
                    }
                    pushFollow(FOLLOW_ruleGamma_in_ruleBuilt_In_Methods12380);
                    this_Gamma_24=ruleGamma();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {
                       
                              current = this_Gamma_24; 
                              afterParserOrEnumRuleCall();
                          
                    }

                    }
                    break;
                case 26 :
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:5354:5: this_Max_25= ruleMax
                    {
                    if ( state.backtracking==0 ) {
                       
                              newCompositeNode(grammarAccess.getBuilt_In_MethodsAccess().getMaxParserRuleCall_25()); 
                          
                    }
                    pushFollow(FOLLOW_ruleMax_in_ruleBuilt_In_Methods12407);
                    this_Max_25=ruleMax();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {
                       
                              current = this_Max_25; 
                              afterParserOrEnumRuleCall();
                          
                    }

                    }
                    break;
                case 27 :
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:5364:5: this_Min_26= ruleMin
                    {
                    if ( state.backtracking==0 ) {
                       
                              newCompositeNode(grammarAccess.getBuilt_In_MethodsAccess().getMinParserRuleCall_26()); 
                          
                    }
                    pushFollow(FOLLOW_ruleMin_in_ruleBuilt_In_Methods12434);
                    this_Min_26=ruleMin();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {
                       
                              current = this_Min_26; 
                              afterParserOrEnumRuleCall();
                          
                    }

                    }
                    break;
                case 28 :
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:5374:5: this_Pause_27= rulePause
                    {
                    if ( state.backtracking==0 ) {
                       
                              newCompositeNode(grammarAccess.getBuilt_In_MethodsAccess().getPauseParserRuleCall_27()); 
                          
                    }
                    pushFollow(FOLLOW_rulePause_in_ruleBuilt_In_Methods12461);
                    this_Pause_27=rulePause();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {
                       
                              current = this_Pause_27; 
                              afterParserOrEnumRuleCall();
                          
                    }

                    }
                    break;
                case 29 :
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:5384:5: this_DE_LHS_28= ruleDE_LHS
                    {
                    if ( state.backtracking==0 ) {
                       
                              newCompositeNode(grammarAccess.getBuilt_In_MethodsAccess().getDE_LHSParserRuleCall_28()); 
                          
                    }
                    pushFollow(FOLLOW_ruleDE_LHS_in_ruleBuilt_In_Methods12488);
                    this_DE_LHS_28=ruleDE_LHS();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {
                       
                              current = this_DE_LHS_28; 
                              afterParserOrEnumRuleCall();
                          
                    }

                    }
                    break;
                case 30 :
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:5394:5: this_Size_29= ruleSize
                    {
                    if ( state.backtracking==0 ) {
                       
                              newCompositeNode(grammarAccess.getBuilt_In_MethodsAccess().getSizeParserRuleCall_29()); 
                          
                    }
                    pushFollow(FOLLOW_ruleSize_in_ruleBuilt_In_Methods12515);
                    this_Size_29=ruleSize();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {
                       
                              current = this_Size_29; 
                              afterParserOrEnumRuleCall();
                          
                    }

                    }
                    break;

            }


            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleBuilt_In_Methods"


    // $ANTLR start "entryRuleSqrt"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:5410:1: entryRuleSqrt returns [EObject current=null] : iv_ruleSqrt= ruleSqrt EOF ;
    public final EObject entryRuleSqrt() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleSqrt = null;


        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:5411:2: (iv_ruleSqrt= ruleSqrt EOF )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:5412:2: iv_ruleSqrt= ruleSqrt EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getSqrtRule()); 
            }
            pushFollow(FOLLOW_ruleSqrt_in_entryRuleSqrt12550);
            iv_ruleSqrt=ruleSqrt();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleSqrt; 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRuleSqrt12560); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleSqrt"


    // $ANTLR start "ruleSqrt"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:5419:1: ruleSqrt returns [EObject current=null] : ( ( (lv_BuiltInName_0_0= 'sqrt' ) ) otherlv_1= '(' ( (lv_ex_2_0= ruleAdditiveExpression ) ) otherlv_3= ')' ) ;
    public final EObject ruleSqrt() throws RecognitionException {
        EObject current = null;

        Token lv_BuiltInName_0_0=null;
        Token otherlv_1=null;
        Token otherlv_3=null;
        EObject lv_ex_2_0 = null;


         enterRule(); 
            
        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:5422:28: ( ( ( (lv_BuiltInName_0_0= 'sqrt' ) ) otherlv_1= '(' ( (lv_ex_2_0= ruleAdditiveExpression ) ) otherlv_3= ')' ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:5423:1: ( ( (lv_BuiltInName_0_0= 'sqrt' ) ) otherlv_1= '(' ( (lv_ex_2_0= ruleAdditiveExpression ) ) otherlv_3= ')' )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:5423:1: ( ( (lv_BuiltInName_0_0= 'sqrt' ) ) otherlv_1= '(' ( (lv_ex_2_0= ruleAdditiveExpression ) ) otherlv_3= ')' )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:5423:2: ( (lv_BuiltInName_0_0= 'sqrt' ) ) otherlv_1= '(' ( (lv_ex_2_0= ruleAdditiveExpression ) ) otherlv_3= ')'
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:5423:2: ( (lv_BuiltInName_0_0= 'sqrt' ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:5424:1: (lv_BuiltInName_0_0= 'sqrt' )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:5424:1: (lv_BuiltInName_0_0= 'sqrt' )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:5425:3: lv_BuiltInName_0_0= 'sqrt'
            {
            lv_BuiltInName_0_0=(Token)match(input,109,FOLLOW_109_in_ruleSqrt12603); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                      newLeafNode(lv_BuiltInName_0_0, grammarAccess.getSqrtAccess().getBuiltInNameSqrtKeyword_0_0());
                  
            }
            if ( state.backtracking==0 ) {

              	        if (current==null) {
              	            current = createModelElement(grammarAccess.getSqrtRule());
              	        }
                     		setWithLastConsumed(current, "BuiltInName", lv_BuiltInName_0_0, "sqrt");
              	    
            }

            }


            }

            otherlv_1=(Token)match(input,52,FOLLOW_52_in_ruleSqrt12628); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_1, grammarAccess.getSqrtAccess().getLeftParenthesisKeyword_1());
                  
            }
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:5442:1: ( (lv_ex_2_0= ruleAdditiveExpression ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:5443:1: (lv_ex_2_0= ruleAdditiveExpression )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:5443:1: (lv_ex_2_0= ruleAdditiveExpression )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:5444:3: lv_ex_2_0= ruleAdditiveExpression
            {
            if ( state.backtracking==0 ) {
               
              	        newCompositeNode(grammarAccess.getSqrtAccess().getExAdditiveExpressionParserRuleCall_2_0()); 
              	    
            }
            pushFollow(FOLLOW_ruleAdditiveExpression_in_ruleSqrt12649);
            lv_ex_2_0=ruleAdditiveExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              	        if (current==null) {
              	            current = createModelElementForParent(grammarAccess.getSqrtRule());
              	        }
                     		set(
                     			current, 
                     			"ex",
                      		lv_ex_2_0, 
                      		"AdditiveExpression");
              	        afterParserOrEnumRuleCall();
              	    
            }

            }


            }

            otherlv_3=(Token)match(input,54,FOLLOW_54_in_ruleSqrt12661); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_3, grammarAccess.getSqrtAccess().getRightParenthesisKeyword_3());
                  
            }

            }


            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleSqrt"


    // $ANTLR start "entryRuleSin"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:5472:1: entryRuleSin returns [EObject current=null] : iv_ruleSin= ruleSin EOF ;
    public final EObject entryRuleSin() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleSin = null;


        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:5473:2: (iv_ruleSin= ruleSin EOF )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:5474:2: iv_ruleSin= ruleSin EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getSinRule()); 
            }
            pushFollow(FOLLOW_ruleSin_in_entryRuleSin12697);
            iv_ruleSin=ruleSin();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleSin; 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRuleSin12707); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleSin"


    // $ANTLR start "ruleSin"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:5481:1: ruleSin returns [EObject current=null] : ( ( (lv_BuiltInName_0_0= 'sin' ) ) otherlv_1= '(' ( (lv_ex_2_0= ruleAdditiveExpression ) ) otherlv_3= ')' ) ;
    public final EObject ruleSin() throws RecognitionException {
        EObject current = null;

        Token lv_BuiltInName_0_0=null;
        Token otherlv_1=null;
        Token otherlv_3=null;
        EObject lv_ex_2_0 = null;


         enterRule(); 
            
        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:5484:28: ( ( ( (lv_BuiltInName_0_0= 'sin' ) ) otherlv_1= '(' ( (lv_ex_2_0= ruleAdditiveExpression ) ) otherlv_3= ')' ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:5485:1: ( ( (lv_BuiltInName_0_0= 'sin' ) ) otherlv_1= '(' ( (lv_ex_2_0= ruleAdditiveExpression ) ) otherlv_3= ')' )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:5485:1: ( ( (lv_BuiltInName_0_0= 'sin' ) ) otherlv_1= '(' ( (lv_ex_2_0= ruleAdditiveExpression ) ) otherlv_3= ')' )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:5485:2: ( (lv_BuiltInName_0_0= 'sin' ) ) otherlv_1= '(' ( (lv_ex_2_0= ruleAdditiveExpression ) ) otherlv_3= ')'
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:5485:2: ( (lv_BuiltInName_0_0= 'sin' ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:5486:1: (lv_BuiltInName_0_0= 'sin' )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:5486:1: (lv_BuiltInName_0_0= 'sin' )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:5487:3: lv_BuiltInName_0_0= 'sin'
            {
            lv_BuiltInName_0_0=(Token)match(input,110,FOLLOW_110_in_ruleSin12750); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                      newLeafNode(lv_BuiltInName_0_0, grammarAccess.getSinAccess().getBuiltInNameSinKeyword_0_0());
                  
            }
            if ( state.backtracking==0 ) {

              	        if (current==null) {
              	            current = createModelElement(grammarAccess.getSinRule());
              	        }
                     		setWithLastConsumed(current, "BuiltInName", lv_BuiltInName_0_0, "sin");
              	    
            }

            }


            }

            otherlv_1=(Token)match(input,52,FOLLOW_52_in_ruleSin12775); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_1, grammarAccess.getSinAccess().getLeftParenthesisKeyword_1());
                  
            }
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:5504:1: ( (lv_ex_2_0= ruleAdditiveExpression ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:5505:1: (lv_ex_2_0= ruleAdditiveExpression )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:5505:1: (lv_ex_2_0= ruleAdditiveExpression )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:5506:3: lv_ex_2_0= ruleAdditiveExpression
            {
            if ( state.backtracking==0 ) {
               
              	        newCompositeNode(grammarAccess.getSinAccess().getExAdditiveExpressionParserRuleCall_2_0()); 
              	    
            }
            pushFollow(FOLLOW_ruleAdditiveExpression_in_ruleSin12796);
            lv_ex_2_0=ruleAdditiveExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              	        if (current==null) {
              	            current = createModelElementForParent(grammarAccess.getSinRule());
              	        }
                     		set(
                     			current, 
                     			"ex",
                      		lv_ex_2_0, 
                      		"AdditiveExpression");
              	        afterParserOrEnumRuleCall();
              	    
            }

            }


            }

            otherlv_3=(Token)match(input,54,FOLLOW_54_in_ruleSin12808); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_3, grammarAccess.getSinAccess().getRightParenthesisKeyword_3());
                  
            }

            }


            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleSin"


    // $ANTLR start "entryRuleCos"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:5534:1: entryRuleCos returns [EObject current=null] : iv_ruleCos= ruleCos EOF ;
    public final EObject entryRuleCos() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleCos = null;


        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:5535:2: (iv_ruleCos= ruleCos EOF )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:5536:2: iv_ruleCos= ruleCos EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getCosRule()); 
            }
            pushFollow(FOLLOW_ruleCos_in_entryRuleCos12844);
            iv_ruleCos=ruleCos();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleCos; 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRuleCos12854); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleCos"


    // $ANTLR start "ruleCos"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:5543:1: ruleCos returns [EObject current=null] : ( ( (lv_BuiltInName_0_0= 'cos' ) ) otherlv_1= '(' ( (lv_ex_2_0= ruleAdditiveExpression ) ) otherlv_3= ')' ) ;
    public final EObject ruleCos() throws RecognitionException {
        EObject current = null;

        Token lv_BuiltInName_0_0=null;
        Token otherlv_1=null;
        Token otherlv_3=null;
        EObject lv_ex_2_0 = null;


         enterRule(); 
            
        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:5546:28: ( ( ( (lv_BuiltInName_0_0= 'cos' ) ) otherlv_1= '(' ( (lv_ex_2_0= ruleAdditiveExpression ) ) otherlv_3= ')' ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:5547:1: ( ( (lv_BuiltInName_0_0= 'cos' ) ) otherlv_1= '(' ( (lv_ex_2_0= ruleAdditiveExpression ) ) otherlv_3= ')' )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:5547:1: ( ( (lv_BuiltInName_0_0= 'cos' ) ) otherlv_1= '(' ( (lv_ex_2_0= ruleAdditiveExpression ) ) otherlv_3= ')' )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:5547:2: ( (lv_BuiltInName_0_0= 'cos' ) ) otherlv_1= '(' ( (lv_ex_2_0= ruleAdditiveExpression ) ) otherlv_3= ')'
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:5547:2: ( (lv_BuiltInName_0_0= 'cos' ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:5548:1: (lv_BuiltInName_0_0= 'cos' )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:5548:1: (lv_BuiltInName_0_0= 'cos' )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:5549:3: lv_BuiltInName_0_0= 'cos'
            {
            lv_BuiltInName_0_0=(Token)match(input,111,FOLLOW_111_in_ruleCos12897); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                      newLeafNode(lv_BuiltInName_0_0, grammarAccess.getCosAccess().getBuiltInNameCosKeyword_0_0());
                  
            }
            if ( state.backtracking==0 ) {

              	        if (current==null) {
              	            current = createModelElement(grammarAccess.getCosRule());
              	        }
                     		setWithLastConsumed(current, "BuiltInName", lv_BuiltInName_0_0, "cos");
              	    
            }

            }


            }

            otherlv_1=(Token)match(input,52,FOLLOW_52_in_ruleCos12922); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_1, grammarAccess.getCosAccess().getLeftParenthesisKeyword_1());
                  
            }
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:5566:1: ( (lv_ex_2_0= ruleAdditiveExpression ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:5567:1: (lv_ex_2_0= ruleAdditiveExpression )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:5567:1: (lv_ex_2_0= ruleAdditiveExpression )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:5568:3: lv_ex_2_0= ruleAdditiveExpression
            {
            if ( state.backtracking==0 ) {
               
              	        newCompositeNode(grammarAccess.getCosAccess().getExAdditiveExpressionParserRuleCall_2_0()); 
              	    
            }
            pushFollow(FOLLOW_ruleAdditiveExpression_in_ruleCos12943);
            lv_ex_2_0=ruleAdditiveExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              	        if (current==null) {
              	            current = createModelElementForParent(grammarAccess.getCosRule());
              	        }
                     		set(
                     			current, 
                     			"ex",
                      		lv_ex_2_0, 
                      		"AdditiveExpression");
              	        afterParserOrEnumRuleCall();
              	    
            }

            }


            }

            otherlv_3=(Token)match(input,54,FOLLOW_54_in_ruleCos12955); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_3, grammarAccess.getCosAccess().getRightParenthesisKeyword_3());
                  
            }

            }


            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleCos"


    // $ANTLR start "entryRuleTan"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:5596:1: entryRuleTan returns [EObject current=null] : iv_ruleTan= ruleTan EOF ;
    public final EObject entryRuleTan() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleTan = null;


        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:5597:2: (iv_ruleTan= ruleTan EOF )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:5598:2: iv_ruleTan= ruleTan EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getTanRule()); 
            }
            pushFollow(FOLLOW_ruleTan_in_entryRuleTan12991);
            iv_ruleTan=ruleTan();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleTan; 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRuleTan13001); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleTan"


    // $ANTLR start "ruleTan"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:5605:1: ruleTan returns [EObject current=null] : ( ( (lv_BuiltInName_0_0= 'tan' ) ) otherlv_1= '(' ( (lv_ex_2_0= ruleAdditiveExpression ) ) otherlv_3= ')' ) ;
    public final EObject ruleTan() throws RecognitionException {
        EObject current = null;

        Token lv_BuiltInName_0_0=null;
        Token otherlv_1=null;
        Token otherlv_3=null;
        EObject lv_ex_2_0 = null;


         enterRule(); 
            
        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:5608:28: ( ( ( (lv_BuiltInName_0_0= 'tan' ) ) otherlv_1= '(' ( (lv_ex_2_0= ruleAdditiveExpression ) ) otherlv_3= ')' ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:5609:1: ( ( (lv_BuiltInName_0_0= 'tan' ) ) otherlv_1= '(' ( (lv_ex_2_0= ruleAdditiveExpression ) ) otherlv_3= ')' )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:5609:1: ( ( (lv_BuiltInName_0_0= 'tan' ) ) otherlv_1= '(' ( (lv_ex_2_0= ruleAdditiveExpression ) ) otherlv_3= ')' )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:5609:2: ( (lv_BuiltInName_0_0= 'tan' ) ) otherlv_1= '(' ( (lv_ex_2_0= ruleAdditiveExpression ) ) otherlv_3= ')'
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:5609:2: ( (lv_BuiltInName_0_0= 'tan' ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:5610:1: (lv_BuiltInName_0_0= 'tan' )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:5610:1: (lv_BuiltInName_0_0= 'tan' )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:5611:3: lv_BuiltInName_0_0= 'tan'
            {
            lv_BuiltInName_0_0=(Token)match(input,112,FOLLOW_112_in_ruleTan13044); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                      newLeafNode(lv_BuiltInName_0_0, grammarAccess.getTanAccess().getBuiltInNameTanKeyword_0_0());
                  
            }
            if ( state.backtracking==0 ) {

              	        if (current==null) {
              	            current = createModelElement(grammarAccess.getTanRule());
              	        }
                     		setWithLastConsumed(current, "BuiltInName", lv_BuiltInName_0_0, "tan");
              	    
            }

            }


            }

            otherlv_1=(Token)match(input,52,FOLLOW_52_in_ruleTan13069); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_1, grammarAccess.getTanAccess().getLeftParenthesisKeyword_1());
                  
            }
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:5628:1: ( (lv_ex_2_0= ruleAdditiveExpression ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:5629:1: (lv_ex_2_0= ruleAdditiveExpression )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:5629:1: (lv_ex_2_0= ruleAdditiveExpression )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:5630:3: lv_ex_2_0= ruleAdditiveExpression
            {
            if ( state.backtracking==0 ) {
               
              	        newCompositeNode(grammarAccess.getTanAccess().getExAdditiveExpressionParserRuleCall_2_0()); 
              	    
            }
            pushFollow(FOLLOW_ruleAdditiveExpression_in_ruleTan13090);
            lv_ex_2_0=ruleAdditiveExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              	        if (current==null) {
              	            current = createModelElementForParent(grammarAccess.getTanRule());
              	        }
                     		set(
                     			current, 
                     			"ex",
                      		lv_ex_2_0, 
                      		"AdditiveExpression");
              	        afterParserOrEnumRuleCall();
              	    
            }

            }


            }

            otherlv_3=(Token)match(input,54,FOLLOW_54_in_ruleTan13102); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_3, grammarAccess.getTanAccess().getRightParenthesisKeyword_3());
                  
            }

            }


            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleTan"


    // $ANTLR start "entryRuleCot"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:5658:1: entryRuleCot returns [EObject current=null] : iv_ruleCot= ruleCot EOF ;
    public final EObject entryRuleCot() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleCot = null;


        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:5659:2: (iv_ruleCot= ruleCot EOF )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:5660:2: iv_ruleCot= ruleCot EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getCotRule()); 
            }
            pushFollow(FOLLOW_ruleCot_in_entryRuleCot13138);
            iv_ruleCot=ruleCot();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleCot; 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRuleCot13148); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleCot"


    // $ANTLR start "ruleCot"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:5667:1: ruleCot returns [EObject current=null] : ( ( (lv_BuiltInName_0_0= 'cot' ) ) otherlv_1= '(' ( (lv_ex_2_0= ruleAdditiveExpression ) ) otherlv_3= ')' ) ;
    public final EObject ruleCot() throws RecognitionException {
        EObject current = null;

        Token lv_BuiltInName_0_0=null;
        Token otherlv_1=null;
        Token otherlv_3=null;
        EObject lv_ex_2_0 = null;


         enterRule(); 
            
        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:5670:28: ( ( ( (lv_BuiltInName_0_0= 'cot' ) ) otherlv_1= '(' ( (lv_ex_2_0= ruleAdditiveExpression ) ) otherlv_3= ')' ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:5671:1: ( ( (lv_BuiltInName_0_0= 'cot' ) ) otherlv_1= '(' ( (lv_ex_2_0= ruleAdditiveExpression ) ) otherlv_3= ')' )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:5671:1: ( ( (lv_BuiltInName_0_0= 'cot' ) ) otherlv_1= '(' ( (lv_ex_2_0= ruleAdditiveExpression ) ) otherlv_3= ')' )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:5671:2: ( (lv_BuiltInName_0_0= 'cot' ) ) otherlv_1= '(' ( (lv_ex_2_0= ruleAdditiveExpression ) ) otherlv_3= ')'
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:5671:2: ( (lv_BuiltInName_0_0= 'cot' ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:5672:1: (lv_BuiltInName_0_0= 'cot' )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:5672:1: (lv_BuiltInName_0_0= 'cot' )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:5673:3: lv_BuiltInName_0_0= 'cot'
            {
            lv_BuiltInName_0_0=(Token)match(input,113,FOLLOW_113_in_ruleCot13191); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                      newLeafNode(lv_BuiltInName_0_0, grammarAccess.getCotAccess().getBuiltInNameCotKeyword_0_0());
                  
            }
            if ( state.backtracking==0 ) {

              	        if (current==null) {
              	            current = createModelElement(grammarAccess.getCotRule());
              	        }
                     		setWithLastConsumed(current, "BuiltInName", lv_BuiltInName_0_0, "cot");
              	    
            }

            }


            }

            otherlv_1=(Token)match(input,52,FOLLOW_52_in_ruleCot13216); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_1, grammarAccess.getCotAccess().getLeftParenthesisKeyword_1());
                  
            }
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:5690:1: ( (lv_ex_2_0= ruleAdditiveExpression ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:5691:1: (lv_ex_2_0= ruleAdditiveExpression )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:5691:1: (lv_ex_2_0= ruleAdditiveExpression )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:5692:3: lv_ex_2_0= ruleAdditiveExpression
            {
            if ( state.backtracking==0 ) {
               
              	        newCompositeNode(grammarAccess.getCotAccess().getExAdditiveExpressionParserRuleCall_2_0()); 
              	    
            }
            pushFollow(FOLLOW_ruleAdditiveExpression_in_ruleCot13237);
            lv_ex_2_0=ruleAdditiveExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              	        if (current==null) {
              	            current = createModelElementForParent(grammarAccess.getCotRule());
              	        }
                     		set(
                     			current, 
                     			"ex",
                      		lv_ex_2_0, 
                      		"AdditiveExpression");
              	        afterParserOrEnumRuleCall();
              	    
            }

            }


            }

            otherlv_3=(Token)match(input,54,FOLLOW_54_in_ruleCot13249); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_3, grammarAccess.getCotAccess().getRightParenthesisKeyword_3());
                  
            }

            }


            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleCot"


    // $ANTLR start "entryRuleSec"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:5720:1: entryRuleSec returns [EObject current=null] : iv_ruleSec= ruleSec EOF ;
    public final EObject entryRuleSec() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleSec = null;


        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:5721:2: (iv_ruleSec= ruleSec EOF )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:5722:2: iv_ruleSec= ruleSec EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getSecRule()); 
            }
            pushFollow(FOLLOW_ruleSec_in_entryRuleSec13285);
            iv_ruleSec=ruleSec();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleSec; 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRuleSec13295); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleSec"


    // $ANTLR start "ruleSec"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:5729:1: ruleSec returns [EObject current=null] : ( ( (lv_BuiltInName_0_0= 'sec' ) ) otherlv_1= '(' ( (lv_ex_2_0= ruleAdditiveExpression ) ) otherlv_3= ')' ) ;
    public final EObject ruleSec() throws RecognitionException {
        EObject current = null;

        Token lv_BuiltInName_0_0=null;
        Token otherlv_1=null;
        Token otherlv_3=null;
        EObject lv_ex_2_0 = null;


         enterRule(); 
            
        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:5732:28: ( ( ( (lv_BuiltInName_0_0= 'sec' ) ) otherlv_1= '(' ( (lv_ex_2_0= ruleAdditiveExpression ) ) otherlv_3= ')' ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:5733:1: ( ( (lv_BuiltInName_0_0= 'sec' ) ) otherlv_1= '(' ( (lv_ex_2_0= ruleAdditiveExpression ) ) otherlv_3= ')' )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:5733:1: ( ( (lv_BuiltInName_0_0= 'sec' ) ) otherlv_1= '(' ( (lv_ex_2_0= ruleAdditiveExpression ) ) otherlv_3= ')' )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:5733:2: ( (lv_BuiltInName_0_0= 'sec' ) ) otherlv_1= '(' ( (lv_ex_2_0= ruleAdditiveExpression ) ) otherlv_3= ')'
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:5733:2: ( (lv_BuiltInName_0_0= 'sec' ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:5734:1: (lv_BuiltInName_0_0= 'sec' )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:5734:1: (lv_BuiltInName_0_0= 'sec' )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:5735:3: lv_BuiltInName_0_0= 'sec'
            {
            lv_BuiltInName_0_0=(Token)match(input,114,FOLLOW_114_in_ruleSec13338); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                      newLeafNode(lv_BuiltInName_0_0, grammarAccess.getSecAccess().getBuiltInNameSecKeyword_0_0());
                  
            }
            if ( state.backtracking==0 ) {

              	        if (current==null) {
              	            current = createModelElement(grammarAccess.getSecRule());
              	        }
                     		setWithLastConsumed(current, "BuiltInName", lv_BuiltInName_0_0, "sec");
              	    
            }

            }


            }

            otherlv_1=(Token)match(input,52,FOLLOW_52_in_ruleSec13363); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_1, grammarAccess.getSecAccess().getLeftParenthesisKeyword_1());
                  
            }
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:5752:1: ( (lv_ex_2_0= ruleAdditiveExpression ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:5753:1: (lv_ex_2_0= ruleAdditiveExpression )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:5753:1: (lv_ex_2_0= ruleAdditiveExpression )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:5754:3: lv_ex_2_0= ruleAdditiveExpression
            {
            if ( state.backtracking==0 ) {
               
              	        newCompositeNode(grammarAccess.getSecAccess().getExAdditiveExpressionParserRuleCall_2_0()); 
              	    
            }
            pushFollow(FOLLOW_ruleAdditiveExpression_in_ruleSec13384);
            lv_ex_2_0=ruleAdditiveExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              	        if (current==null) {
              	            current = createModelElementForParent(grammarAccess.getSecRule());
              	        }
                     		set(
                     			current, 
                     			"ex",
                      		lv_ex_2_0, 
                      		"AdditiveExpression");
              	        afterParserOrEnumRuleCall();
              	    
            }

            }


            }

            otherlv_3=(Token)match(input,54,FOLLOW_54_in_ruleSec13396); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_3, grammarAccess.getSecAccess().getRightParenthesisKeyword_3());
                  
            }

            }


            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleSec"


    // $ANTLR start "entryRuleCsc"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:5782:1: entryRuleCsc returns [EObject current=null] : iv_ruleCsc= ruleCsc EOF ;
    public final EObject entryRuleCsc() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleCsc = null;


        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:5783:2: (iv_ruleCsc= ruleCsc EOF )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:5784:2: iv_ruleCsc= ruleCsc EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getCscRule()); 
            }
            pushFollow(FOLLOW_ruleCsc_in_entryRuleCsc13432);
            iv_ruleCsc=ruleCsc();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleCsc; 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRuleCsc13442); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleCsc"


    // $ANTLR start "ruleCsc"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:5791:1: ruleCsc returns [EObject current=null] : ( ( (lv_BuiltInName_0_0= 'csc' ) ) otherlv_1= '(' ( (lv_ex_2_0= ruleAdditiveExpression ) ) otherlv_3= ')' ) ;
    public final EObject ruleCsc() throws RecognitionException {
        EObject current = null;

        Token lv_BuiltInName_0_0=null;
        Token otherlv_1=null;
        Token otherlv_3=null;
        EObject lv_ex_2_0 = null;


         enterRule(); 
            
        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:5794:28: ( ( ( (lv_BuiltInName_0_0= 'csc' ) ) otherlv_1= '(' ( (lv_ex_2_0= ruleAdditiveExpression ) ) otherlv_3= ')' ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:5795:1: ( ( (lv_BuiltInName_0_0= 'csc' ) ) otherlv_1= '(' ( (lv_ex_2_0= ruleAdditiveExpression ) ) otherlv_3= ')' )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:5795:1: ( ( (lv_BuiltInName_0_0= 'csc' ) ) otherlv_1= '(' ( (lv_ex_2_0= ruleAdditiveExpression ) ) otherlv_3= ')' )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:5795:2: ( (lv_BuiltInName_0_0= 'csc' ) ) otherlv_1= '(' ( (lv_ex_2_0= ruleAdditiveExpression ) ) otherlv_3= ')'
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:5795:2: ( (lv_BuiltInName_0_0= 'csc' ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:5796:1: (lv_BuiltInName_0_0= 'csc' )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:5796:1: (lv_BuiltInName_0_0= 'csc' )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:5797:3: lv_BuiltInName_0_0= 'csc'
            {
            lv_BuiltInName_0_0=(Token)match(input,115,FOLLOW_115_in_ruleCsc13485); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                      newLeafNode(lv_BuiltInName_0_0, grammarAccess.getCscAccess().getBuiltInNameCscKeyword_0_0());
                  
            }
            if ( state.backtracking==0 ) {

              	        if (current==null) {
              	            current = createModelElement(grammarAccess.getCscRule());
              	        }
                     		setWithLastConsumed(current, "BuiltInName", lv_BuiltInName_0_0, "csc");
              	    
            }

            }


            }

            otherlv_1=(Token)match(input,52,FOLLOW_52_in_ruleCsc13510); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_1, grammarAccess.getCscAccess().getLeftParenthesisKeyword_1());
                  
            }
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:5814:1: ( (lv_ex_2_0= ruleAdditiveExpression ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:5815:1: (lv_ex_2_0= ruleAdditiveExpression )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:5815:1: (lv_ex_2_0= ruleAdditiveExpression )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:5816:3: lv_ex_2_0= ruleAdditiveExpression
            {
            if ( state.backtracking==0 ) {
               
              	        newCompositeNode(grammarAccess.getCscAccess().getExAdditiveExpressionParserRuleCall_2_0()); 
              	    
            }
            pushFollow(FOLLOW_ruleAdditiveExpression_in_ruleCsc13531);
            lv_ex_2_0=ruleAdditiveExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              	        if (current==null) {
              	            current = createModelElementForParent(grammarAccess.getCscRule());
              	        }
                     		set(
                     			current, 
                     			"ex",
                      		lv_ex_2_0, 
                      		"AdditiveExpression");
              	        afterParserOrEnumRuleCall();
              	    
            }

            }


            }

            otherlv_3=(Token)match(input,54,FOLLOW_54_in_ruleCsc13543); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_3, grammarAccess.getCscAccess().getRightParenthesisKeyword_3());
                  
            }

            }


            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleCsc"


    // $ANTLR start "entryRuleRound"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:5844:1: entryRuleRound returns [EObject current=null] : iv_ruleRound= ruleRound EOF ;
    public final EObject entryRuleRound() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleRound = null;


        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:5845:2: (iv_ruleRound= ruleRound EOF )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:5846:2: iv_ruleRound= ruleRound EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getRoundRule()); 
            }
            pushFollow(FOLLOW_ruleRound_in_entryRuleRound13579);
            iv_ruleRound=ruleRound();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleRound; 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRuleRound13589); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleRound"


    // $ANTLR start "ruleRound"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:5853:1: ruleRound returns [EObject current=null] : ( ( (lv_BuiltInName_0_0= 'round' ) ) otherlv_1= '(' ( (lv_ex_2_0= ruleAdditiveExpression ) ) otherlv_3= ')' ) ;
    public final EObject ruleRound() throws RecognitionException {
        EObject current = null;

        Token lv_BuiltInName_0_0=null;
        Token otherlv_1=null;
        Token otherlv_3=null;
        EObject lv_ex_2_0 = null;


         enterRule(); 
            
        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:5856:28: ( ( ( (lv_BuiltInName_0_0= 'round' ) ) otherlv_1= '(' ( (lv_ex_2_0= ruleAdditiveExpression ) ) otherlv_3= ')' ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:5857:1: ( ( (lv_BuiltInName_0_0= 'round' ) ) otherlv_1= '(' ( (lv_ex_2_0= ruleAdditiveExpression ) ) otherlv_3= ')' )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:5857:1: ( ( (lv_BuiltInName_0_0= 'round' ) ) otherlv_1= '(' ( (lv_ex_2_0= ruleAdditiveExpression ) ) otherlv_3= ')' )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:5857:2: ( (lv_BuiltInName_0_0= 'round' ) ) otherlv_1= '(' ( (lv_ex_2_0= ruleAdditiveExpression ) ) otherlv_3= ')'
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:5857:2: ( (lv_BuiltInName_0_0= 'round' ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:5858:1: (lv_BuiltInName_0_0= 'round' )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:5858:1: (lv_BuiltInName_0_0= 'round' )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:5859:3: lv_BuiltInName_0_0= 'round'
            {
            lv_BuiltInName_0_0=(Token)match(input,116,FOLLOW_116_in_ruleRound13632); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                      newLeafNode(lv_BuiltInName_0_0, grammarAccess.getRoundAccess().getBuiltInNameRoundKeyword_0_0());
                  
            }
            if ( state.backtracking==0 ) {

              	        if (current==null) {
              	            current = createModelElement(grammarAccess.getRoundRule());
              	        }
                     		setWithLastConsumed(current, "BuiltInName", lv_BuiltInName_0_0, "round");
              	    
            }

            }


            }

            otherlv_1=(Token)match(input,52,FOLLOW_52_in_ruleRound13657); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_1, grammarAccess.getRoundAccess().getLeftParenthesisKeyword_1());
                  
            }
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:5876:1: ( (lv_ex_2_0= ruleAdditiveExpression ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:5877:1: (lv_ex_2_0= ruleAdditiveExpression )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:5877:1: (lv_ex_2_0= ruleAdditiveExpression )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:5878:3: lv_ex_2_0= ruleAdditiveExpression
            {
            if ( state.backtracking==0 ) {
               
              	        newCompositeNode(grammarAccess.getRoundAccess().getExAdditiveExpressionParserRuleCall_2_0()); 
              	    
            }
            pushFollow(FOLLOW_ruleAdditiveExpression_in_ruleRound13678);
            lv_ex_2_0=ruleAdditiveExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              	        if (current==null) {
              	            current = createModelElementForParent(grammarAccess.getRoundRule());
              	        }
                     		set(
                     			current, 
                     			"ex",
                      		lv_ex_2_0, 
                      		"AdditiveExpression");
              	        afterParserOrEnumRuleCall();
              	    
            }

            }


            }

            otherlv_3=(Token)match(input,54,FOLLOW_54_in_ruleRound13690); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_3, grammarAccess.getRoundAccess().getRightParenthesisKeyword_3());
                  
            }

            }


            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleRound"


    // $ANTLR start "entryRuleFloor"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:5906:1: entryRuleFloor returns [EObject current=null] : iv_ruleFloor= ruleFloor EOF ;
    public final EObject entryRuleFloor() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleFloor = null;


        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:5907:2: (iv_ruleFloor= ruleFloor EOF )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:5908:2: iv_ruleFloor= ruleFloor EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getFloorRule()); 
            }
            pushFollow(FOLLOW_ruleFloor_in_entryRuleFloor13726);
            iv_ruleFloor=ruleFloor();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleFloor; 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRuleFloor13736); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleFloor"


    // $ANTLR start "ruleFloor"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:5915:1: ruleFloor returns [EObject current=null] : ( ( (lv_BuiltInName_0_0= 'floor' ) ) otherlv_1= '(' ( (lv_ex_2_0= ruleAdditiveExpression ) ) otherlv_3= ')' ) ;
    public final EObject ruleFloor() throws RecognitionException {
        EObject current = null;

        Token lv_BuiltInName_0_0=null;
        Token otherlv_1=null;
        Token otherlv_3=null;
        EObject lv_ex_2_0 = null;


         enterRule(); 
            
        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:5918:28: ( ( ( (lv_BuiltInName_0_0= 'floor' ) ) otherlv_1= '(' ( (lv_ex_2_0= ruleAdditiveExpression ) ) otherlv_3= ')' ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:5919:1: ( ( (lv_BuiltInName_0_0= 'floor' ) ) otherlv_1= '(' ( (lv_ex_2_0= ruleAdditiveExpression ) ) otherlv_3= ')' )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:5919:1: ( ( (lv_BuiltInName_0_0= 'floor' ) ) otherlv_1= '(' ( (lv_ex_2_0= ruleAdditiveExpression ) ) otherlv_3= ')' )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:5919:2: ( (lv_BuiltInName_0_0= 'floor' ) ) otherlv_1= '(' ( (lv_ex_2_0= ruleAdditiveExpression ) ) otherlv_3= ')'
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:5919:2: ( (lv_BuiltInName_0_0= 'floor' ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:5920:1: (lv_BuiltInName_0_0= 'floor' )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:5920:1: (lv_BuiltInName_0_0= 'floor' )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:5921:3: lv_BuiltInName_0_0= 'floor'
            {
            lv_BuiltInName_0_0=(Token)match(input,117,FOLLOW_117_in_ruleFloor13779); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                      newLeafNode(lv_BuiltInName_0_0, grammarAccess.getFloorAccess().getBuiltInNameFloorKeyword_0_0());
                  
            }
            if ( state.backtracking==0 ) {

              	        if (current==null) {
              	            current = createModelElement(grammarAccess.getFloorRule());
              	        }
                     		setWithLastConsumed(current, "BuiltInName", lv_BuiltInName_0_0, "floor");
              	    
            }

            }


            }

            otherlv_1=(Token)match(input,52,FOLLOW_52_in_ruleFloor13804); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_1, grammarAccess.getFloorAccess().getLeftParenthesisKeyword_1());
                  
            }
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:5938:1: ( (lv_ex_2_0= ruleAdditiveExpression ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:5939:1: (lv_ex_2_0= ruleAdditiveExpression )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:5939:1: (lv_ex_2_0= ruleAdditiveExpression )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:5940:3: lv_ex_2_0= ruleAdditiveExpression
            {
            if ( state.backtracking==0 ) {
               
              	        newCompositeNode(grammarAccess.getFloorAccess().getExAdditiveExpressionParserRuleCall_2_0()); 
              	    
            }
            pushFollow(FOLLOW_ruleAdditiveExpression_in_ruleFloor13825);
            lv_ex_2_0=ruleAdditiveExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              	        if (current==null) {
              	            current = createModelElementForParent(grammarAccess.getFloorRule());
              	        }
                     		set(
                     			current, 
                     			"ex",
                      		lv_ex_2_0, 
                      		"AdditiveExpression");
              	        afterParserOrEnumRuleCall();
              	    
            }

            }


            }

            otherlv_3=(Token)match(input,54,FOLLOW_54_in_ruleFloor13837); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_3, grammarAccess.getFloorAccess().getRightParenthesisKeyword_3());
                  
            }

            }


            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleFloor"


    // $ANTLR start "entryRuleCeil"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:5968:1: entryRuleCeil returns [EObject current=null] : iv_ruleCeil= ruleCeil EOF ;
    public final EObject entryRuleCeil() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleCeil = null;


        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:5969:2: (iv_ruleCeil= ruleCeil EOF )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:5970:2: iv_ruleCeil= ruleCeil EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getCeilRule()); 
            }
            pushFollow(FOLLOW_ruleCeil_in_entryRuleCeil13873);
            iv_ruleCeil=ruleCeil();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleCeil; 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRuleCeil13883); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleCeil"


    // $ANTLR start "ruleCeil"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:5977:1: ruleCeil returns [EObject current=null] : ( ( (lv_BuiltInName_0_0= 'ceil' ) ) otherlv_1= '(' ( (lv_ex_2_0= ruleAdditiveExpression ) ) otherlv_3= ')' ) ;
    public final EObject ruleCeil() throws RecognitionException {
        EObject current = null;

        Token lv_BuiltInName_0_0=null;
        Token otherlv_1=null;
        Token otherlv_3=null;
        EObject lv_ex_2_0 = null;


         enterRule(); 
            
        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:5980:28: ( ( ( (lv_BuiltInName_0_0= 'ceil' ) ) otherlv_1= '(' ( (lv_ex_2_0= ruleAdditiveExpression ) ) otherlv_3= ')' ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:5981:1: ( ( (lv_BuiltInName_0_0= 'ceil' ) ) otherlv_1= '(' ( (lv_ex_2_0= ruleAdditiveExpression ) ) otherlv_3= ')' )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:5981:1: ( ( (lv_BuiltInName_0_0= 'ceil' ) ) otherlv_1= '(' ( (lv_ex_2_0= ruleAdditiveExpression ) ) otherlv_3= ')' )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:5981:2: ( (lv_BuiltInName_0_0= 'ceil' ) ) otherlv_1= '(' ( (lv_ex_2_0= ruleAdditiveExpression ) ) otherlv_3= ')'
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:5981:2: ( (lv_BuiltInName_0_0= 'ceil' ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:5982:1: (lv_BuiltInName_0_0= 'ceil' )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:5982:1: (lv_BuiltInName_0_0= 'ceil' )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:5983:3: lv_BuiltInName_0_0= 'ceil'
            {
            lv_BuiltInName_0_0=(Token)match(input,118,FOLLOW_118_in_ruleCeil13926); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                      newLeafNode(lv_BuiltInName_0_0, grammarAccess.getCeilAccess().getBuiltInNameCeilKeyword_0_0());
                  
            }
            if ( state.backtracking==0 ) {

              	        if (current==null) {
              	            current = createModelElement(grammarAccess.getCeilRule());
              	        }
                     		setWithLastConsumed(current, "BuiltInName", lv_BuiltInName_0_0, "ceil");
              	    
            }

            }


            }

            otherlv_1=(Token)match(input,52,FOLLOW_52_in_ruleCeil13951); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_1, grammarAccess.getCeilAccess().getLeftParenthesisKeyword_1());
                  
            }
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6000:1: ( (lv_ex_2_0= ruleAdditiveExpression ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6001:1: (lv_ex_2_0= ruleAdditiveExpression )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6001:1: (lv_ex_2_0= ruleAdditiveExpression )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6002:3: lv_ex_2_0= ruleAdditiveExpression
            {
            if ( state.backtracking==0 ) {
               
              	        newCompositeNode(grammarAccess.getCeilAccess().getExAdditiveExpressionParserRuleCall_2_0()); 
              	    
            }
            pushFollow(FOLLOW_ruleAdditiveExpression_in_ruleCeil13972);
            lv_ex_2_0=ruleAdditiveExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              	        if (current==null) {
              	            current = createModelElementForParent(grammarAccess.getCeilRule());
              	        }
                     		set(
                     			current, 
                     			"ex",
                      		lv_ex_2_0, 
                      		"AdditiveExpression");
              	        afterParserOrEnumRuleCall();
              	    
            }

            }


            }

            otherlv_3=(Token)match(input,54,FOLLOW_54_in_ruleCeil13984); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_3, grammarAccess.getCeilAccess().getRightParenthesisKeyword_3());
                  
            }

            }


            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleCeil"


    // $ANTLR start "entryRuleDiv"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6030:1: entryRuleDiv returns [EObject current=null] : iv_ruleDiv= ruleDiv EOF ;
    public final EObject entryRuleDiv() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleDiv = null;


        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6031:2: (iv_ruleDiv= ruleDiv EOF )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6032:2: iv_ruleDiv= ruleDiv EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getDivRule()); 
            }
            pushFollow(FOLLOW_ruleDiv_in_entryRuleDiv14020);
            iv_ruleDiv=ruleDiv();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleDiv; 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRuleDiv14030); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleDiv"


    // $ANTLR start "ruleDiv"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6039:1: ruleDiv returns [EObject current=null] : ( ( (lv_BuiltInName_0_0= 'div' ) ) otherlv_1= '(' ( (lv_e1_2_0= ruleAdditiveExpression ) ) otherlv_3= ',' ( (lv_e2_4_0= ruleAdditiveExpression ) ) otherlv_5= ')' ) ;
    public final EObject ruleDiv() throws RecognitionException {
        EObject current = null;

        Token lv_BuiltInName_0_0=null;
        Token otherlv_1=null;
        Token otherlv_3=null;
        Token otherlv_5=null;
        EObject lv_e1_2_0 = null;

        EObject lv_e2_4_0 = null;


         enterRule(); 
            
        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6042:28: ( ( ( (lv_BuiltInName_0_0= 'div' ) ) otherlv_1= '(' ( (lv_e1_2_0= ruleAdditiveExpression ) ) otherlv_3= ',' ( (lv_e2_4_0= ruleAdditiveExpression ) ) otherlv_5= ')' ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6043:1: ( ( (lv_BuiltInName_0_0= 'div' ) ) otherlv_1= '(' ( (lv_e1_2_0= ruleAdditiveExpression ) ) otherlv_3= ',' ( (lv_e2_4_0= ruleAdditiveExpression ) ) otherlv_5= ')' )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6043:1: ( ( (lv_BuiltInName_0_0= 'div' ) ) otherlv_1= '(' ( (lv_e1_2_0= ruleAdditiveExpression ) ) otherlv_3= ',' ( (lv_e2_4_0= ruleAdditiveExpression ) ) otherlv_5= ')' )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6043:2: ( (lv_BuiltInName_0_0= 'div' ) ) otherlv_1= '(' ( (lv_e1_2_0= ruleAdditiveExpression ) ) otherlv_3= ',' ( (lv_e2_4_0= ruleAdditiveExpression ) ) otherlv_5= ')'
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6043:2: ( (lv_BuiltInName_0_0= 'div' ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6044:1: (lv_BuiltInName_0_0= 'div' )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6044:1: (lv_BuiltInName_0_0= 'div' )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6045:3: lv_BuiltInName_0_0= 'div'
            {
            lv_BuiltInName_0_0=(Token)match(input,119,FOLLOW_119_in_ruleDiv14073); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                      newLeafNode(lv_BuiltInName_0_0, grammarAccess.getDivAccess().getBuiltInNameDivKeyword_0_0());
                  
            }
            if ( state.backtracking==0 ) {

              	        if (current==null) {
              	            current = createModelElement(grammarAccess.getDivRule());
              	        }
                     		setWithLastConsumed(current, "BuiltInName", lv_BuiltInName_0_0, "div");
              	    
            }

            }


            }

            otherlv_1=(Token)match(input,52,FOLLOW_52_in_ruleDiv14098); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_1, grammarAccess.getDivAccess().getLeftParenthesisKeyword_1());
                  
            }
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6062:1: ( (lv_e1_2_0= ruleAdditiveExpression ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6063:1: (lv_e1_2_0= ruleAdditiveExpression )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6063:1: (lv_e1_2_0= ruleAdditiveExpression )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6064:3: lv_e1_2_0= ruleAdditiveExpression
            {
            if ( state.backtracking==0 ) {
               
              	        newCompositeNode(grammarAccess.getDivAccess().getE1AdditiveExpressionParserRuleCall_2_0()); 
              	    
            }
            pushFollow(FOLLOW_ruleAdditiveExpression_in_ruleDiv14119);
            lv_e1_2_0=ruleAdditiveExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              	        if (current==null) {
              	            current = createModelElementForParent(grammarAccess.getDivRule());
              	        }
                     		set(
                     			current, 
                     			"e1",
                      		lv_e1_2_0, 
                      		"AdditiveExpression");
              	        afterParserOrEnumRuleCall();
              	    
            }

            }


            }

            otherlv_3=(Token)match(input,53,FOLLOW_53_in_ruleDiv14131); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_3, grammarAccess.getDivAccess().getCommaKeyword_3());
                  
            }
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6084:1: ( (lv_e2_4_0= ruleAdditiveExpression ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6085:1: (lv_e2_4_0= ruleAdditiveExpression )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6085:1: (lv_e2_4_0= ruleAdditiveExpression )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6086:3: lv_e2_4_0= ruleAdditiveExpression
            {
            if ( state.backtracking==0 ) {
               
              	        newCompositeNode(grammarAccess.getDivAccess().getE2AdditiveExpressionParserRuleCall_4_0()); 
              	    
            }
            pushFollow(FOLLOW_ruleAdditiveExpression_in_ruleDiv14152);
            lv_e2_4_0=ruleAdditiveExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              	        if (current==null) {
              	            current = createModelElementForParent(grammarAccess.getDivRule());
              	        }
                     		set(
                     			current, 
                     			"e2",
                      		lv_e2_4_0, 
                      		"AdditiveExpression");
              	        afterParserOrEnumRuleCall();
              	    
            }

            }


            }

            otherlv_5=(Token)match(input,54,FOLLOW_54_in_ruleDiv14164); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_5, grammarAccess.getDivAccess().getRightParenthesisKeyword_5());
                  
            }

            }


            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleDiv"


    // $ANTLR start "entryRuleFld"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6114:1: entryRuleFld returns [EObject current=null] : iv_ruleFld= ruleFld EOF ;
    public final EObject entryRuleFld() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleFld = null;


        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6115:2: (iv_ruleFld= ruleFld EOF )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6116:2: iv_ruleFld= ruleFld EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getFldRule()); 
            }
            pushFollow(FOLLOW_ruleFld_in_entryRuleFld14200);
            iv_ruleFld=ruleFld();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleFld; 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRuleFld14210); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleFld"


    // $ANTLR start "ruleFld"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6123:1: ruleFld returns [EObject current=null] : ( ( (lv_BuiltInName_0_0= 'fld' ) ) otherlv_1= '(' ( (lv_e1_2_0= ruleAdditiveExpression ) ) otherlv_3= ',' ( (lv_e2_4_0= ruleAdditiveExpression ) ) otherlv_5= ')' ) ;
    public final EObject ruleFld() throws RecognitionException {
        EObject current = null;

        Token lv_BuiltInName_0_0=null;
        Token otherlv_1=null;
        Token otherlv_3=null;
        Token otherlv_5=null;
        EObject lv_e1_2_0 = null;

        EObject lv_e2_4_0 = null;


         enterRule(); 
            
        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6126:28: ( ( ( (lv_BuiltInName_0_0= 'fld' ) ) otherlv_1= '(' ( (lv_e1_2_0= ruleAdditiveExpression ) ) otherlv_3= ',' ( (lv_e2_4_0= ruleAdditiveExpression ) ) otherlv_5= ')' ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6127:1: ( ( (lv_BuiltInName_0_0= 'fld' ) ) otherlv_1= '(' ( (lv_e1_2_0= ruleAdditiveExpression ) ) otherlv_3= ',' ( (lv_e2_4_0= ruleAdditiveExpression ) ) otherlv_5= ')' )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6127:1: ( ( (lv_BuiltInName_0_0= 'fld' ) ) otherlv_1= '(' ( (lv_e1_2_0= ruleAdditiveExpression ) ) otherlv_3= ',' ( (lv_e2_4_0= ruleAdditiveExpression ) ) otherlv_5= ')' )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6127:2: ( (lv_BuiltInName_0_0= 'fld' ) ) otherlv_1= '(' ( (lv_e1_2_0= ruleAdditiveExpression ) ) otherlv_3= ',' ( (lv_e2_4_0= ruleAdditiveExpression ) ) otherlv_5= ')'
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6127:2: ( (lv_BuiltInName_0_0= 'fld' ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6128:1: (lv_BuiltInName_0_0= 'fld' )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6128:1: (lv_BuiltInName_0_0= 'fld' )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6129:3: lv_BuiltInName_0_0= 'fld'
            {
            lv_BuiltInName_0_0=(Token)match(input,120,FOLLOW_120_in_ruleFld14253); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                      newLeafNode(lv_BuiltInName_0_0, grammarAccess.getFldAccess().getBuiltInNameFldKeyword_0_0());
                  
            }
            if ( state.backtracking==0 ) {

              	        if (current==null) {
              	            current = createModelElement(grammarAccess.getFldRule());
              	        }
                     		setWithLastConsumed(current, "BuiltInName", lv_BuiltInName_0_0, "fld");
              	    
            }

            }


            }

            otherlv_1=(Token)match(input,52,FOLLOW_52_in_ruleFld14278); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_1, grammarAccess.getFldAccess().getLeftParenthesisKeyword_1());
                  
            }
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6146:1: ( (lv_e1_2_0= ruleAdditiveExpression ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6147:1: (lv_e1_2_0= ruleAdditiveExpression )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6147:1: (lv_e1_2_0= ruleAdditiveExpression )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6148:3: lv_e1_2_0= ruleAdditiveExpression
            {
            if ( state.backtracking==0 ) {
               
              	        newCompositeNode(grammarAccess.getFldAccess().getE1AdditiveExpressionParserRuleCall_2_0()); 
              	    
            }
            pushFollow(FOLLOW_ruleAdditiveExpression_in_ruleFld14299);
            lv_e1_2_0=ruleAdditiveExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              	        if (current==null) {
              	            current = createModelElementForParent(grammarAccess.getFldRule());
              	        }
                     		set(
                     			current, 
                     			"e1",
                      		lv_e1_2_0, 
                      		"AdditiveExpression");
              	        afterParserOrEnumRuleCall();
              	    
            }

            }


            }

            otherlv_3=(Token)match(input,53,FOLLOW_53_in_ruleFld14311); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_3, grammarAccess.getFldAccess().getCommaKeyword_3());
                  
            }
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6168:1: ( (lv_e2_4_0= ruleAdditiveExpression ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6169:1: (lv_e2_4_0= ruleAdditiveExpression )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6169:1: (lv_e2_4_0= ruleAdditiveExpression )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6170:3: lv_e2_4_0= ruleAdditiveExpression
            {
            if ( state.backtracking==0 ) {
               
              	        newCompositeNode(grammarAccess.getFldAccess().getE2AdditiveExpressionParserRuleCall_4_0()); 
              	    
            }
            pushFollow(FOLLOW_ruleAdditiveExpression_in_ruleFld14332);
            lv_e2_4_0=ruleAdditiveExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              	        if (current==null) {
              	            current = createModelElementForParent(grammarAccess.getFldRule());
              	        }
                     		set(
                     			current, 
                     			"e2",
                      		lv_e2_4_0, 
                      		"AdditiveExpression");
              	        afterParserOrEnumRuleCall();
              	    
            }

            }


            }

            otherlv_5=(Token)match(input,54,FOLLOW_54_in_ruleFld14344); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_5, grammarAccess.getFldAccess().getRightParenthesisKeyword_5());
                  
            }

            }


            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleFld"


    // $ANTLR start "entryRuleRem"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6198:1: entryRuleRem returns [EObject current=null] : iv_ruleRem= ruleRem EOF ;
    public final EObject entryRuleRem() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleRem = null;


        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6199:2: (iv_ruleRem= ruleRem EOF )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6200:2: iv_ruleRem= ruleRem EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getRemRule()); 
            }
            pushFollow(FOLLOW_ruleRem_in_entryRuleRem14380);
            iv_ruleRem=ruleRem();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleRem; 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRuleRem14390); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleRem"


    // $ANTLR start "ruleRem"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6207:1: ruleRem returns [EObject current=null] : ( ( (lv_BuiltInName_0_0= 'rem' ) ) otherlv_1= '(' ( (lv_e1_2_0= ruleAdditiveExpression ) ) otherlv_3= ',' ( (lv_e2_4_0= ruleAdditiveExpression ) ) otherlv_5= ')' ) ;
    public final EObject ruleRem() throws RecognitionException {
        EObject current = null;

        Token lv_BuiltInName_0_0=null;
        Token otherlv_1=null;
        Token otherlv_3=null;
        Token otherlv_5=null;
        EObject lv_e1_2_0 = null;

        EObject lv_e2_4_0 = null;


         enterRule(); 
            
        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6210:28: ( ( ( (lv_BuiltInName_0_0= 'rem' ) ) otherlv_1= '(' ( (lv_e1_2_0= ruleAdditiveExpression ) ) otherlv_3= ',' ( (lv_e2_4_0= ruleAdditiveExpression ) ) otherlv_5= ')' ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6211:1: ( ( (lv_BuiltInName_0_0= 'rem' ) ) otherlv_1= '(' ( (lv_e1_2_0= ruleAdditiveExpression ) ) otherlv_3= ',' ( (lv_e2_4_0= ruleAdditiveExpression ) ) otherlv_5= ')' )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6211:1: ( ( (lv_BuiltInName_0_0= 'rem' ) ) otherlv_1= '(' ( (lv_e1_2_0= ruleAdditiveExpression ) ) otherlv_3= ',' ( (lv_e2_4_0= ruleAdditiveExpression ) ) otherlv_5= ')' )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6211:2: ( (lv_BuiltInName_0_0= 'rem' ) ) otherlv_1= '(' ( (lv_e1_2_0= ruleAdditiveExpression ) ) otherlv_3= ',' ( (lv_e2_4_0= ruleAdditiveExpression ) ) otherlv_5= ')'
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6211:2: ( (lv_BuiltInName_0_0= 'rem' ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6212:1: (lv_BuiltInName_0_0= 'rem' )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6212:1: (lv_BuiltInName_0_0= 'rem' )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6213:3: lv_BuiltInName_0_0= 'rem'
            {
            lv_BuiltInName_0_0=(Token)match(input,121,FOLLOW_121_in_ruleRem14433); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                      newLeafNode(lv_BuiltInName_0_0, grammarAccess.getRemAccess().getBuiltInNameRemKeyword_0_0());
                  
            }
            if ( state.backtracking==0 ) {

              	        if (current==null) {
              	            current = createModelElement(grammarAccess.getRemRule());
              	        }
                     		setWithLastConsumed(current, "BuiltInName", lv_BuiltInName_0_0, "rem");
              	    
            }

            }


            }

            otherlv_1=(Token)match(input,52,FOLLOW_52_in_ruleRem14458); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_1, grammarAccess.getRemAccess().getLeftParenthesisKeyword_1());
                  
            }
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6230:1: ( (lv_e1_2_0= ruleAdditiveExpression ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6231:1: (lv_e1_2_0= ruleAdditiveExpression )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6231:1: (lv_e1_2_0= ruleAdditiveExpression )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6232:3: lv_e1_2_0= ruleAdditiveExpression
            {
            if ( state.backtracking==0 ) {
               
              	        newCompositeNode(grammarAccess.getRemAccess().getE1AdditiveExpressionParserRuleCall_2_0()); 
              	    
            }
            pushFollow(FOLLOW_ruleAdditiveExpression_in_ruleRem14479);
            lv_e1_2_0=ruleAdditiveExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              	        if (current==null) {
              	            current = createModelElementForParent(grammarAccess.getRemRule());
              	        }
                     		set(
                     			current, 
                     			"e1",
                      		lv_e1_2_0, 
                      		"AdditiveExpression");
              	        afterParserOrEnumRuleCall();
              	    
            }

            }


            }

            otherlv_3=(Token)match(input,53,FOLLOW_53_in_ruleRem14491); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_3, grammarAccess.getRemAccess().getCommaKeyword_3());
                  
            }
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6252:1: ( (lv_e2_4_0= ruleAdditiveExpression ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6253:1: (lv_e2_4_0= ruleAdditiveExpression )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6253:1: (lv_e2_4_0= ruleAdditiveExpression )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6254:3: lv_e2_4_0= ruleAdditiveExpression
            {
            if ( state.backtracking==0 ) {
               
              	        newCompositeNode(grammarAccess.getRemAccess().getE2AdditiveExpressionParserRuleCall_4_0()); 
              	    
            }
            pushFollow(FOLLOW_ruleAdditiveExpression_in_ruleRem14512);
            lv_e2_4_0=ruleAdditiveExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              	        if (current==null) {
              	            current = createModelElementForParent(grammarAccess.getRemRule());
              	        }
                     		set(
                     			current, 
                     			"e2",
                      		lv_e2_4_0, 
                      		"AdditiveExpression");
              	        afterParserOrEnumRuleCall();
              	    
            }

            }


            }

            otherlv_5=(Token)match(input,54,FOLLOW_54_in_ruleRem14524); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_5, grammarAccess.getRemAccess().getRightParenthesisKeyword_5());
                  
            }

            }


            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleRem"


    // $ANTLR start "entryRuleMod"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6282:1: entryRuleMod returns [EObject current=null] : iv_ruleMod= ruleMod EOF ;
    public final EObject entryRuleMod() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleMod = null;


        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6283:2: (iv_ruleMod= ruleMod EOF )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6284:2: iv_ruleMod= ruleMod EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getModRule()); 
            }
            pushFollow(FOLLOW_ruleMod_in_entryRuleMod14560);
            iv_ruleMod=ruleMod();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleMod; 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRuleMod14570); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleMod"


    // $ANTLR start "ruleMod"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6291:1: ruleMod returns [EObject current=null] : ( ( (lv_BuiltInName_0_0= 'mod' ) ) otherlv_1= '(' ( (lv_e1_2_0= ruleAdditiveExpression ) ) otherlv_3= ',' ( (lv_e2_4_0= ruleAdditiveExpression ) ) otherlv_5= ')' ) ;
    public final EObject ruleMod() throws RecognitionException {
        EObject current = null;

        Token lv_BuiltInName_0_0=null;
        Token otherlv_1=null;
        Token otherlv_3=null;
        Token otherlv_5=null;
        EObject lv_e1_2_0 = null;

        EObject lv_e2_4_0 = null;


         enterRule(); 
            
        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6294:28: ( ( ( (lv_BuiltInName_0_0= 'mod' ) ) otherlv_1= '(' ( (lv_e1_2_0= ruleAdditiveExpression ) ) otherlv_3= ',' ( (lv_e2_4_0= ruleAdditiveExpression ) ) otherlv_5= ')' ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6295:1: ( ( (lv_BuiltInName_0_0= 'mod' ) ) otherlv_1= '(' ( (lv_e1_2_0= ruleAdditiveExpression ) ) otherlv_3= ',' ( (lv_e2_4_0= ruleAdditiveExpression ) ) otherlv_5= ')' )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6295:1: ( ( (lv_BuiltInName_0_0= 'mod' ) ) otherlv_1= '(' ( (lv_e1_2_0= ruleAdditiveExpression ) ) otherlv_3= ',' ( (lv_e2_4_0= ruleAdditiveExpression ) ) otherlv_5= ')' )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6295:2: ( (lv_BuiltInName_0_0= 'mod' ) ) otherlv_1= '(' ( (lv_e1_2_0= ruleAdditiveExpression ) ) otherlv_3= ',' ( (lv_e2_4_0= ruleAdditiveExpression ) ) otherlv_5= ')'
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6295:2: ( (lv_BuiltInName_0_0= 'mod' ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6296:1: (lv_BuiltInName_0_0= 'mod' )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6296:1: (lv_BuiltInName_0_0= 'mod' )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6297:3: lv_BuiltInName_0_0= 'mod'
            {
            lv_BuiltInName_0_0=(Token)match(input,122,FOLLOW_122_in_ruleMod14613); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                      newLeafNode(lv_BuiltInName_0_0, grammarAccess.getModAccess().getBuiltInNameModKeyword_0_0());
                  
            }
            if ( state.backtracking==0 ) {

              	        if (current==null) {
              	            current = createModelElement(grammarAccess.getModRule());
              	        }
                     		setWithLastConsumed(current, "BuiltInName", lv_BuiltInName_0_0, "mod");
              	    
            }

            }


            }

            otherlv_1=(Token)match(input,52,FOLLOW_52_in_ruleMod14638); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_1, grammarAccess.getModAccess().getLeftParenthesisKeyword_1());
                  
            }
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6314:1: ( (lv_e1_2_0= ruleAdditiveExpression ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6315:1: (lv_e1_2_0= ruleAdditiveExpression )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6315:1: (lv_e1_2_0= ruleAdditiveExpression )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6316:3: lv_e1_2_0= ruleAdditiveExpression
            {
            if ( state.backtracking==0 ) {
               
              	        newCompositeNode(grammarAccess.getModAccess().getE1AdditiveExpressionParserRuleCall_2_0()); 
              	    
            }
            pushFollow(FOLLOW_ruleAdditiveExpression_in_ruleMod14659);
            lv_e1_2_0=ruleAdditiveExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              	        if (current==null) {
              	            current = createModelElementForParent(grammarAccess.getModRule());
              	        }
                     		set(
                     			current, 
                     			"e1",
                      		lv_e1_2_0, 
                      		"AdditiveExpression");
              	        afterParserOrEnumRuleCall();
              	    
            }

            }


            }

            otherlv_3=(Token)match(input,53,FOLLOW_53_in_ruleMod14671); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_3, grammarAccess.getModAccess().getCommaKeyword_3());
                  
            }
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6336:1: ( (lv_e2_4_0= ruleAdditiveExpression ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6337:1: (lv_e2_4_0= ruleAdditiveExpression )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6337:1: (lv_e2_4_0= ruleAdditiveExpression )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6338:3: lv_e2_4_0= ruleAdditiveExpression
            {
            if ( state.backtracking==0 ) {
               
              	        newCompositeNode(grammarAccess.getModAccess().getE2AdditiveExpressionParserRuleCall_4_0()); 
              	    
            }
            pushFollow(FOLLOW_ruleAdditiveExpression_in_ruleMod14692);
            lv_e2_4_0=ruleAdditiveExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              	        if (current==null) {
              	            current = createModelElementForParent(grammarAccess.getModRule());
              	        }
                     		set(
                     			current, 
                     			"e2",
                      		lv_e2_4_0, 
                      		"AdditiveExpression");
              	        afterParserOrEnumRuleCall();
              	    
            }

            }


            }

            otherlv_5=(Token)match(input,54,FOLLOW_54_in_ruleMod14704); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_5, grammarAccess.getModAccess().getRightParenthesisKeyword_5());
                  
            }

            }


            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleMod"


    // $ANTLR start "entryRuleGcd"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6366:1: entryRuleGcd returns [EObject current=null] : iv_ruleGcd= ruleGcd EOF ;
    public final EObject entryRuleGcd() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleGcd = null;


        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6367:2: (iv_ruleGcd= ruleGcd EOF )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6368:2: iv_ruleGcd= ruleGcd EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getGcdRule()); 
            }
            pushFollow(FOLLOW_ruleGcd_in_entryRuleGcd14740);
            iv_ruleGcd=ruleGcd();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleGcd; 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRuleGcd14750); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleGcd"


    // $ANTLR start "ruleGcd"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6375:1: ruleGcd returns [EObject current=null] : ( ( (lv_BuiltInName_0_0= 'gcd' ) ) otherlv_1= '(' ( (lv_e1_2_0= ruleAdditiveExpression ) ) (otherlv_3= ',' ( (lv_e2_4_0= ruleAdditiveExpression ) ) )* otherlv_5= ')' ) ;
    public final EObject ruleGcd() throws RecognitionException {
        EObject current = null;

        Token lv_BuiltInName_0_0=null;
        Token otherlv_1=null;
        Token otherlv_3=null;
        Token otherlv_5=null;
        EObject lv_e1_2_0 = null;

        EObject lv_e2_4_0 = null;


         enterRule(); 
            
        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6378:28: ( ( ( (lv_BuiltInName_0_0= 'gcd' ) ) otherlv_1= '(' ( (lv_e1_2_0= ruleAdditiveExpression ) ) (otherlv_3= ',' ( (lv_e2_4_0= ruleAdditiveExpression ) ) )* otherlv_5= ')' ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6379:1: ( ( (lv_BuiltInName_0_0= 'gcd' ) ) otherlv_1= '(' ( (lv_e1_2_0= ruleAdditiveExpression ) ) (otherlv_3= ',' ( (lv_e2_4_0= ruleAdditiveExpression ) ) )* otherlv_5= ')' )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6379:1: ( ( (lv_BuiltInName_0_0= 'gcd' ) ) otherlv_1= '(' ( (lv_e1_2_0= ruleAdditiveExpression ) ) (otherlv_3= ',' ( (lv_e2_4_0= ruleAdditiveExpression ) ) )* otherlv_5= ')' )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6379:2: ( (lv_BuiltInName_0_0= 'gcd' ) ) otherlv_1= '(' ( (lv_e1_2_0= ruleAdditiveExpression ) ) (otherlv_3= ',' ( (lv_e2_4_0= ruleAdditiveExpression ) ) )* otherlv_5= ')'
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6379:2: ( (lv_BuiltInName_0_0= 'gcd' ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6380:1: (lv_BuiltInName_0_0= 'gcd' )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6380:1: (lv_BuiltInName_0_0= 'gcd' )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6381:3: lv_BuiltInName_0_0= 'gcd'
            {
            lv_BuiltInName_0_0=(Token)match(input,123,FOLLOW_123_in_ruleGcd14793); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                      newLeafNode(lv_BuiltInName_0_0, grammarAccess.getGcdAccess().getBuiltInNameGcdKeyword_0_0());
                  
            }
            if ( state.backtracking==0 ) {

              	        if (current==null) {
              	            current = createModelElement(grammarAccess.getGcdRule());
              	        }
                     		setWithLastConsumed(current, "BuiltInName", lv_BuiltInName_0_0, "gcd");
              	    
            }

            }


            }

            otherlv_1=(Token)match(input,52,FOLLOW_52_in_ruleGcd14818); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_1, grammarAccess.getGcdAccess().getLeftParenthesisKeyword_1());
                  
            }
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6398:1: ( (lv_e1_2_0= ruleAdditiveExpression ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6399:1: (lv_e1_2_0= ruleAdditiveExpression )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6399:1: (lv_e1_2_0= ruleAdditiveExpression )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6400:3: lv_e1_2_0= ruleAdditiveExpression
            {
            if ( state.backtracking==0 ) {
               
              	        newCompositeNode(grammarAccess.getGcdAccess().getE1AdditiveExpressionParserRuleCall_2_0()); 
              	    
            }
            pushFollow(FOLLOW_ruleAdditiveExpression_in_ruleGcd14839);
            lv_e1_2_0=ruleAdditiveExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              	        if (current==null) {
              	            current = createModelElementForParent(grammarAccess.getGcdRule());
              	        }
                     		set(
                     			current, 
                     			"e1",
                      		lv_e1_2_0, 
                      		"AdditiveExpression");
              	        afterParserOrEnumRuleCall();
              	    
            }

            }


            }

            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6416:2: (otherlv_3= ',' ( (lv_e2_4_0= ruleAdditiveExpression ) ) )*
            loop80:
            do {
                int alt80=2;
                int LA80_0 = input.LA(1);

                if ( (LA80_0==53) ) {
                    alt80=1;
                }


                switch (alt80) {
            	case 1 :
            	    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6416:4: otherlv_3= ',' ( (lv_e2_4_0= ruleAdditiveExpression ) )
            	    {
            	    otherlv_3=(Token)match(input,53,FOLLOW_53_in_ruleGcd14852); if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	          	newLeafNode(otherlv_3, grammarAccess.getGcdAccess().getCommaKeyword_3_0());
            	          
            	    }
            	    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6420:1: ( (lv_e2_4_0= ruleAdditiveExpression ) )
            	    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6421:1: (lv_e2_4_0= ruleAdditiveExpression )
            	    {
            	    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6421:1: (lv_e2_4_0= ruleAdditiveExpression )
            	    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6422:3: lv_e2_4_0= ruleAdditiveExpression
            	    {
            	    if ( state.backtracking==0 ) {
            	       
            	      	        newCompositeNode(grammarAccess.getGcdAccess().getE2AdditiveExpressionParserRuleCall_3_1_0()); 
            	      	    
            	    }
            	    pushFollow(FOLLOW_ruleAdditiveExpression_in_ruleGcd14873);
            	    lv_e2_4_0=ruleAdditiveExpression();

            	    state._fsp--;
            	    if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      	        if (current==null) {
            	      	            current = createModelElementForParent(grammarAccess.getGcdRule());
            	      	        }
            	             		add(
            	             			current, 
            	             			"e2",
            	              		lv_e2_4_0, 
            	              		"AdditiveExpression");
            	      	        afterParserOrEnumRuleCall();
            	      	    
            	    }

            	    }


            	    }


            	    }
            	    break;

            	default :
            	    break loop80;
                }
            } while (true);

            otherlv_5=(Token)match(input,54,FOLLOW_54_in_ruleGcd14887); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_5, grammarAccess.getGcdAccess().getRightParenthesisKeyword_4());
                  
            }

            }


            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleGcd"


    // $ANTLR start "entryRuleLcm"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6450:1: entryRuleLcm returns [EObject current=null] : iv_ruleLcm= ruleLcm EOF ;
    public final EObject entryRuleLcm() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleLcm = null;


        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6451:2: (iv_ruleLcm= ruleLcm EOF )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6452:2: iv_ruleLcm= ruleLcm EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getLcmRule()); 
            }
            pushFollow(FOLLOW_ruleLcm_in_entryRuleLcm14923);
            iv_ruleLcm=ruleLcm();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleLcm; 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRuleLcm14933); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleLcm"


    // $ANTLR start "ruleLcm"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6459:1: ruleLcm returns [EObject current=null] : ( ( (lv_BuiltInName_0_0= 'lcm' ) ) otherlv_1= '(' ( (lv_e1_2_0= ruleAdditiveExpression ) ) (otherlv_3= ',' ( (lv_e2_4_0= ruleAdditiveExpression ) ) )* otherlv_5= ')' ) ;
    public final EObject ruleLcm() throws RecognitionException {
        EObject current = null;

        Token lv_BuiltInName_0_0=null;
        Token otherlv_1=null;
        Token otherlv_3=null;
        Token otherlv_5=null;
        EObject lv_e1_2_0 = null;

        EObject lv_e2_4_0 = null;


         enterRule(); 
            
        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6462:28: ( ( ( (lv_BuiltInName_0_0= 'lcm' ) ) otherlv_1= '(' ( (lv_e1_2_0= ruleAdditiveExpression ) ) (otherlv_3= ',' ( (lv_e2_4_0= ruleAdditiveExpression ) ) )* otherlv_5= ')' ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6463:1: ( ( (lv_BuiltInName_0_0= 'lcm' ) ) otherlv_1= '(' ( (lv_e1_2_0= ruleAdditiveExpression ) ) (otherlv_3= ',' ( (lv_e2_4_0= ruleAdditiveExpression ) ) )* otherlv_5= ')' )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6463:1: ( ( (lv_BuiltInName_0_0= 'lcm' ) ) otherlv_1= '(' ( (lv_e1_2_0= ruleAdditiveExpression ) ) (otherlv_3= ',' ( (lv_e2_4_0= ruleAdditiveExpression ) ) )* otherlv_5= ')' )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6463:2: ( (lv_BuiltInName_0_0= 'lcm' ) ) otherlv_1= '(' ( (lv_e1_2_0= ruleAdditiveExpression ) ) (otherlv_3= ',' ( (lv_e2_4_0= ruleAdditiveExpression ) ) )* otherlv_5= ')'
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6463:2: ( (lv_BuiltInName_0_0= 'lcm' ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6464:1: (lv_BuiltInName_0_0= 'lcm' )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6464:1: (lv_BuiltInName_0_0= 'lcm' )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6465:3: lv_BuiltInName_0_0= 'lcm'
            {
            lv_BuiltInName_0_0=(Token)match(input,124,FOLLOW_124_in_ruleLcm14976); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                      newLeafNode(lv_BuiltInName_0_0, grammarAccess.getLcmAccess().getBuiltInNameLcmKeyword_0_0());
                  
            }
            if ( state.backtracking==0 ) {

              	        if (current==null) {
              	            current = createModelElement(grammarAccess.getLcmRule());
              	        }
                     		setWithLastConsumed(current, "BuiltInName", lv_BuiltInName_0_0, "lcm");
              	    
            }

            }


            }

            otherlv_1=(Token)match(input,52,FOLLOW_52_in_ruleLcm15001); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_1, grammarAccess.getLcmAccess().getLeftParenthesisKeyword_1());
                  
            }
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6482:1: ( (lv_e1_2_0= ruleAdditiveExpression ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6483:1: (lv_e1_2_0= ruleAdditiveExpression )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6483:1: (lv_e1_2_0= ruleAdditiveExpression )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6484:3: lv_e1_2_0= ruleAdditiveExpression
            {
            if ( state.backtracking==0 ) {
               
              	        newCompositeNode(grammarAccess.getLcmAccess().getE1AdditiveExpressionParserRuleCall_2_0()); 
              	    
            }
            pushFollow(FOLLOW_ruleAdditiveExpression_in_ruleLcm15022);
            lv_e1_2_0=ruleAdditiveExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              	        if (current==null) {
              	            current = createModelElementForParent(grammarAccess.getLcmRule());
              	        }
                     		set(
                     			current, 
                     			"e1",
                      		lv_e1_2_0, 
                      		"AdditiveExpression");
              	        afterParserOrEnumRuleCall();
              	    
            }

            }


            }

            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6500:2: (otherlv_3= ',' ( (lv_e2_4_0= ruleAdditiveExpression ) ) )*
            loop81:
            do {
                int alt81=2;
                int LA81_0 = input.LA(1);

                if ( (LA81_0==53) ) {
                    alt81=1;
                }


                switch (alt81) {
            	case 1 :
            	    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6500:4: otherlv_3= ',' ( (lv_e2_4_0= ruleAdditiveExpression ) )
            	    {
            	    otherlv_3=(Token)match(input,53,FOLLOW_53_in_ruleLcm15035); if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	          	newLeafNode(otherlv_3, grammarAccess.getLcmAccess().getCommaKeyword_3_0());
            	          
            	    }
            	    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6504:1: ( (lv_e2_4_0= ruleAdditiveExpression ) )
            	    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6505:1: (lv_e2_4_0= ruleAdditiveExpression )
            	    {
            	    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6505:1: (lv_e2_4_0= ruleAdditiveExpression )
            	    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6506:3: lv_e2_4_0= ruleAdditiveExpression
            	    {
            	    if ( state.backtracking==0 ) {
            	       
            	      	        newCompositeNode(grammarAccess.getLcmAccess().getE2AdditiveExpressionParserRuleCall_3_1_0()); 
            	      	    
            	    }
            	    pushFollow(FOLLOW_ruleAdditiveExpression_in_ruleLcm15056);
            	    lv_e2_4_0=ruleAdditiveExpression();

            	    state._fsp--;
            	    if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      	        if (current==null) {
            	      	            current = createModelElementForParent(grammarAccess.getLcmRule());
            	      	        }
            	             		add(
            	             			current, 
            	             			"e2",
            	              		lv_e2_4_0, 
            	              		"AdditiveExpression");
            	      	        afterParserOrEnumRuleCall();
            	      	    
            	    }

            	    }


            	    }


            	    }
            	    break;

            	default :
            	    break loop81;
                }
            } while (true);

            otherlv_5=(Token)match(input,54,FOLLOW_54_in_ruleLcm15070); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_5, grammarAccess.getLcmAccess().getRightParenthesisKeyword_4());
                  
            }

            }


            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleLcm"


    // $ANTLR start "entryRuleAbs"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6534:1: entryRuleAbs returns [EObject current=null] : iv_ruleAbs= ruleAbs EOF ;
    public final EObject entryRuleAbs() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleAbs = null;


        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6535:2: (iv_ruleAbs= ruleAbs EOF )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6536:2: iv_ruleAbs= ruleAbs EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getAbsRule()); 
            }
            pushFollow(FOLLOW_ruleAbs_in_entryRuleAbs15106);
            iv_ruleAbs=ruleAbs();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleAbs; 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRuleAbs15116); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleAbs"


    // $ANTLR start "ruleAbs"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6543:1: ruleAbs returns [EObject current=null] : ( ( (lv_BuiltInName_0_0= 'abs' ) ) otherlv_1= '(' ( (lv_ex_2_0= ruleAdditiveExpression ) ) otherlv_3= ')' ) ;
    public final EObject ruleAbs() throws RecognitionException {
        EObject current = null;

        Token lv_BuiltInName_0_0=null;
        Token otherlv_1=null;
        Token otherlv_3=null;
        EObject lv_ex_2_0 = null;


         enterRule(); 
            
        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6546:28: ( ( ( (lv_BuiltInName_0_0= 'abs' ) ) otherlv_1= '(' ( (lv_ex_2_0= ruleAdditiveExpression ) ) otherlv_3= ')' ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6547:1: ( ( (lv_BuiltInName_0_0= 'abs' ) ) otherlv_1= '(' ( (lv_ex_2_0= ruleAdditiveExpression ) ) otherlv_3= ')' )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6547:1: ( ( (lv_BuiltInName_0_0= 'abs' ) ) otherlv_1= '(' ( (lv_ex_2_0= ruleAdditiveExpression ) ) otherlv_3= ')' )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6547:2: ( (lv_BuiltInName_0_0= 'abs' ) ) otherlv_1= '(' ( (lv_ex_2_0= ruleAdditiveExpression ) ) otherlv_3= ')'
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6547:2: ( (lv_BuiltInName_0_0= 'abs' ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6548:1: (lv_BuiltInName_0_0= 'abs' )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6548:1: (lv_BuiltInName_0_0= 'abs' )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6549:3: lv_BuiltInName_0_0= 'abs'
            {
            lv_BuiltInName_0_0=(Token)match(input,125,FOLLOW_125_in_ruleAbs15159); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                      newLeafNode(lv_BuiltInName_0_0, grammarAccess.getAbsAccess().getBuiltInNameAbsKeyword_0_0());
                  
            }
            if ( state.backtracking==0 ) {

              	        if (current==null) {
              	            current = createModelElement(grammarAccess.getAbsRule());
              	        }
                     		setWithLastConsumed(current, "BuiltInName", lv_BuiltInName_0_0, "abs");
              	    
            }

            }


            }

            otherlv_1=(Token)match(input,52,FOLLOW_52_in_ruleAbs15184); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_1, grammarAccess.getAbsAccess().getLeftParenthesisKeyword_1());
                  
            }
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6566:1: ( (lv_ex_2_0= ruleAdditiveExpression ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6567:1: (lv_ex_2_0= ruleAdditiveExpression )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6567:1: (lv_ex_2_0= ruleAdditiveExpression )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6568:3: lv_ex_2_0= ruleAdditiveExpression
            {
            if ( state.backtracking==0 ) {
               
              	        newCompositeNode(grammarAccess.getAbsAccess().getExAdditiveExpressionParserRuleCall_2_0()); 
              	    
            }
            pushFollow(FOLLOW_ruleAdditiveExpression_in_ruleAbs15205);
            lv_ex_2_0=ruleAdditiveExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              	        if (current==null) {
              	            current = createModelElementForParent(grammarAccess.getAbsRule());
              	        }
                     		set(
                     			current, 
                     			"ex",
                      		lv_ex_2_0, 
                      		"AdditiveExpression");
              	        afterParserOrEnumRuleCall();
              	    
            }

            }


            }

            otherlv_3=(Token)match(input,54,FOLLOW_54_in_ruleAbs15217); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_3, grammarAccess.getAbsAccess().getRightParenthesisKeyword_3());
                  
            }

            }


            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleAbs"


    // $ANTLR start "entryRuleSign"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6596:1: entryRuleSign returns [EObject current=null] : iv_ruleSign= ruleSign EOF ;
    public final EObject entryRuleSign() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleSign = null;


        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6597:2: (iv_ruleSign= ruleSign EOF )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6598:2: iv_ruleSign= ruleSign EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getSignRule()); 
            }
            pushFollow(FOLLOW_ruleSign_in_entryRuleSign15253);
            iv_ruleSign=ruleSign();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleSign; 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRuleSign15263); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleSign"


    // $ANTLR start "ruleSign"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6605:1: ruleSign returns [EObject current=null] : ( ( (lv_BuiltInName_0_0= 'sign' ) ) otherlv_1= '(' ( (lv_ex_2_0= ruleAdditiveExpression ) ) otherlv_3= ')' ) ;
    public final EObject ruleSign() throws RecognitionException {
        EObject current = null;

        Token lv_BuiltInName_0_0=null;
        Token otherlv_1=null;
        Token otherlv_3=null;
        EObject lv_ex_2_0 = null;


         enterRule(); 
            
        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6608:28: ( ( ( (lv_BuiltInName_0_0= 'sign' ) ) otherlv_1= '(' ( (lv_ex_2_0= ruleAdditiveExpression ) ) otherlv_3= ')' ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6609:1: ( ( (lv_BuiltInName_0_0= 'sign' ) ) otherlv_1= '(' ( (lv_ex_2_0= ruleAdditiveExpression ) ) otherlv_3= ')' )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6609:1: ( ( (lv_BuiltInName_0_0= 'sign' ) ) otherlv_1= '(' ( (lv_ex_2_0= ruleAdditiveExpression ) ) otherlv_3= ')' )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6609:2: ( (lv_BuiltInName_0_0= 'sign' ) ) otherlv_1= '(' ( (lv_ex_2_0= ruleAdditiveExpression ) ) otherlv_3= ')'
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6609:2: ( (lv_BuiltInName_0_0= 'sign' ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6610:1: (lv_BuiltInName_0_0= 'sign' )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6610:1: (lv_BuiltInName_0_0= 'sign' )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6611:3: lv_BuiltInName_0_0= 'sign'
            {
            lv_BuiltInName_0_0=(Token)match(input,126,FOLLOW_126_in_ruleSign15306); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                      newLeafNode(lv_BuiltInName_0_0, grammarAccess.getSignAccess().getBuiltInNameSignKeyword_0_0());
                  
            }
            if ( state.backtracking==0 ) {

              	        if (current==null) {
              	            current = createModelElement(grammarAccess.getSignRule());
              	        }
                     		setWithLastConsumed(current, "BuiltInName", lv_BuiltInName_0_0, "sign");
              	    
            }

            }


            }

            otherlv_1=(Token)match(input,52,FOLLOW_52_in_ruleSign15331); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_1, grammarAccess.getSignAccess().getLeftParenthesisKeyword_1());
                  
            }
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6628:1: ( (lv_ex_2_0= ruleAdditiveExpression ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6629:1: (lv_ex_2_0= ruleAdditiveExpression )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6629:1: (lv_ex_2_0= ruleAdditiveExpression )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6630:3: lv_ex_2_0= ruleAdditiveExpression
            {
            if ( state.backtracking==0 ) {
               
              	        newCompositeNode(grammarAccess.getSignAccess().getExAdditiveExpressionParserRuleCall_2_0()); 
              	    
            }
            pushFollow(FOLLOW_ruleAdditiveExpression_in_ruleSign15352);
            lv_ex_2_0=ruleAdditiveExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              	        if (current==null) {
              	            current = createModelElementForParent(grammarAccess.getSignRule());
              	        }
                     		set(
                     			current, 
                     			"ex",
                      		lv_ex_2_0, 
                      		"AdditiveExpression");
              	        afterParserOrEnumRuleCall();
              	    
            }

            }


            }

            otherlv_3=(Token)match(input,54,FOLLOW_54_in_ruleSign15364); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_3, grammarAccess.getSignAccess().getRightParenthesisKeyword_3());
                  
            }

            }


            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleSign"


    // $ANTLR start "entryRuleRoot"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6658:1: entryRuleRoot returns [EObject current=null] : iv_ruleRoot= ruleRoot EOF ;
    public final EObject entryRuleRoot() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleRoot = null;


        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6659:2: (iv_ruleRoot= ruleRoot EOF )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6660:2: iv_ruleRoot= ruleRoot EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getRootRule()); 
            }
            pushFollow(FOLLOW_ruleRoot_in_entryRuleRoot15400);
            iv_ruleRoot=ruleRoot();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleRoot; 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRuleRoot15410); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleRoot"


    // $ANTLR start "ruleRoot"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6667:1: ruleRoot returns [EObject current=null] : ( ( (lv_BuiltInName_0_0= 'root' ) ) otherlv_1= '(' ( (lv_e1_2_0= ruleAdditiveExpression ) ) otherlv_3= ',' ( (lv_e2_4_0= ruleAdditiveExpression ) ) otherlv_5= ')' ) ;
    public final EObject ruleRoot() throws RecognitionException {
        EObject current = null;

        Token lv_BuiltInName_0_0=null;
        Token otherlv_1=null;
        Token otherlv_3=null;
        Token otherlv_5=null;
        EObject lv_e1_2_0 = null;

        EObject lv_e2_4_0 = null;


         enterRule(); 
            
        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6670:28: ( ( ( (lv_BuiltInName_0_0= 'root' ) ) otherlv_1= '(' ( (lv_e1_2_0= ruleAdditiveExpression ) ) otherlv_3= ',' ( (lv_e2_4_0= ruleAdditiveExpression ) ) otherlv_5= ')' ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6671:1: ( ( (lv_BuiltInName_0_0= 'root' ) ) otherlv_1= '(' ( (lv_e1_2_0= ruleAdditiveExpression ) ) otherlv_3= ',' ( (lv_e2_4_0= ruleAdditiveExpression ) ) otherlv_5= ')' )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6671:1: ( ( (lv_BuiltInName_0_0= 'root' ) ) otherlv_1= '(' ( (lv_e1_2_0= ruleAdditiveExpression ) ) otherlv_3= ',' ( (lv_e2_4_0= ruleAdditiveExpression ) ) otherlv_5= ')' )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6671:2: ( (lv_BuiltInName_0_0= 'root' ) ) otherlv_1= '(' ( (lv_e1_2_0= ruleAdditiveExpression ) ) otherlv_3= ',' ( (lv_e2_4_0= ruleAdditiveExpression ) ) otherlv_5= ')'
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6671:2: ( (lv_BuiltInName_0_0= 'root' ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6672:1: (lv_BuiltInName_0_0= 'root' )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6672:1: (lv_BuiltInName_0_0= 'root' )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6673:3: lv_BuiltInName_0_0= 'root'
            {
            lv_BuiltInName_0_0=(Token)match(input,127,FOLLOW_127_in_ruleRoot15453); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                      newLeafNode(lv_BuiltInName_0_0, grammarAccess.getRootAccess().getBuiltInNameRootKeyword_0_0());
                  
            }
            if ( state.backtracking==0 ) {

              	        if (current==null) {
              	            current = createModelElement(grammarAccess.getRootRule());
              	        }
                     		setWithLastConsumed(current, "BuiltInName", lv_BuiltInName_0_0, "root");
              	    
            }

            }


            }

            otherlv_1=(Token)match(input,52,FOLLOW_52_in_ruleRoot15478); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_1, grammarAccess.getRootAccess().getLeftParenthesisKeyword_1());
                  
            }
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6690:1: ( (lv_e1_2_0= ruleAdditiveExpression ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6691:1: (lv_e1_2_0= ruleAdditiveExpression )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6691:1: (lv_e1_2_0= ruleAdditiveExpression )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6692:3: lv_e1_2_0= ruleAdditiveExpression
            {
            if ( state.backtracking==0 ) {
               
              	        newCompositeNode(grammarAccess.getRootAccess().getE1AdditiveExpressionParserRuleCall_2_0()); 
              	    
            }
            pushFollow(FOLLOW_ruleAdditiveExpression_in_ruleRoot15499);
            lv_e1_2_0=ruleAdditiveExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              	        if (current==null) {
              	            current = createModelElementForParent(grammarAccess.getRootRule());
              	        }
                     		set(
                     			current, 
                     			"e1",
                      		lv_e1_2_0, 
                      		"AdditiveExpression");
              	        afterParserOrEnumRuleCall();
              	    
            }

            }


            }

            otherlv_3=(Token)match(input,53,FOLLOW_53_in_ruleRoot15511); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_3, grammarAccess.getRootAccess().getCommaKeyword_3());
                  
            }
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6712:1: ( (lv_e2_4_0= ruleAdditiveExpression ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6713:1: (lv_e2_4_0= ruleAdditiveExpression )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6713:1: (lv_e2_4_0= ruleAdditiveExpression )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6714:3: lv_e2_4_0= ruleAdditiveExpression
            {
            if ( state.backtracking==0 ) {
               
              	        newCompositeNode(grammarAccess.getRootAccess().getE2AdditiveExpressionParserRuleCall_4_0()); 
              	    
            }
            pushFollow(FOLLOW_ruleAdditiveExpression_in_ruleRoot15532);
            lv_e2_4_0=ruleAdditiveExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              	        if (current==null) {
              	            current = createModelElementForParent(grammarAccess.getRootRule());
              	        }
                     		set(
                     			current, 
                     			"e2",
                      		lv_e2_4_0, 
                      		"AdditiveExpression");
              	        afterParserOrEnumRuleCall();
              	    
            }

            }


            }

            otherlv_5=(Token)match(input,54,FOLLOW_54_in_ruleRoot15544); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_5, grammarAccess.getRootAccess().getRightParenthesisKeyword_5());
                  
            }

            }


            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleRoot"


    // $ANTLR start "entryRuleHypot"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6742:1: entryRuleHypot returns [EObject current=null] : iv_ruleHypot= ruleHypot EOF ;
    public final EObject entryRuleHypot() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleHypot = null;


        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6743:2: (iv_ruleHypot= ruleHypot EOF )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6744:2: iv_ruleHypot= ruleHypot EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getHypotRule()); 
            }
            pushFollow(FOLLOW_ruleHypot_in_entryRuleHypot15580);
            iv_ruleHypot=ruleHypot();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleHypot; 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRuleHypot15590); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleHypot"


    // $ANTLR start "ruleHypot"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6751:1: ruleHypot returns [EObject current=null] : ( ( (lv_BuiltInName_0_0= 'hypot' ) ) otherlv_1= '(' ( (lv_e1_2_0= ruleAdditiveExpression ) ) otherlv_3= ',' ( (lv_e2_4_0= ruleAdditiveExpression ) ) otherlv_5= ')' ) ;
    public final EObject ruleHypot() throws RecognitionException {
        EObject current = null;

        Token lv_BuiltInName_0_0=null;
        Token otherlv_1=null;
        Token otherlv_3=null;
        Token otherlv_5=null;
        EObject lv_e1_2_0 = null;

        EObject lv_e2_4_0 = null;


         enterRule(); 
            
        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6754:28: ( ( ( (lv_BuiltInName_0_0= 'hypot' ) ) otherlv_1= '(' ( (lv_e1_2_0= ruleAdditiveExpression ) ) otherlv_3= ',' ( (lv_e2_4_0= ruleAdditiveExpression ) ) otherlv_5= ')' ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6755:1: ( ( (lv_BuiltInName_0_0= 'hypot' ) ) otherlv_1= '(' ( (lv_e1_2_0= ruleAdditiveExpression ) ) otherlv_3= ',' ( (lv_e2_4_0= ruleAdditiveExpression ) ) otherlv_5= ')' )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6755:1: ( ( (lv_BuiltInName_0_0= 'hypot' ) ) otherlv_1= '(' ( (lv_e1_2_0= ruleAdditiveExpression ) ) otherlv_3= ',' ( (lv_e2_4_0= ruleAdditiveExpression ) ) otherlv_5= ')' )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6755:2: ( (lv_BuiltInName_0_0= 'hypot' ) ) otherlv_1= '(' ( (lv_e1_2_0= ruleAdditiveExpression ) ) otherlv_3= ',' ( (lv_e2_4_0= ruleAdditiveExpression ) ) otherlv_5= ')'
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6755:2: ( (lv_BuiltInName_0_0= 'hypot' ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6756:1: (lv_BuiltInName_0_0= 'hypot' )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6756:1: (lv_BuiltInName_0_0= 'hypot' )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6757:3: lv_BuiltInName_0_0= 'hypot'
            {
            lv_BuiltInName_0_0=(Token)match(input,128,FOLLOW_128_in_ruleHypot15633); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                      newLeafNode(lv_BuiltInName_0_0, grammarAccess.getHypotAccess().getBuiltInNameHypotKeyword_0_0());
                  
            }
            if ( state.backtracking==0 ) {

              	        if (current==null) {
              	            current = createModelElement(grammarAccess.getHypotRule());
              	        }
                     		setWithLastConsumed(current, "BuiltInName", lv_BuiltInName_0_0, "hypot");
              	    
            }

            }


            }

            otherlv_1=(Token)match(input,52,FOLLOW_52_in_ruleHypot15658); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_1, grammarAccess.getHypotAccess().getLeftParenthesisKeyword_1());
                  
            }
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6774:1: ( (lv_e1_2_0= ruleAdditiveExpression ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6775:1: (lv_e1_2_0= ruleAdditiveExpression )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6775:1: (lv_e1_2_0= ruleAdditiveExpression )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6776:3: lv_e1_2_0= ruleAdditiveExpression
            {
            if ( state.backtracking==0 ) {
               
              	        newCompositeNode(grammarAccess.getHypotAccess().getE1AdditiveExpressionParserRuleCall_2_0()); 
              	    
            }
            pushFollow(FOLLOW_ruleAdditiveExpression_in_ruleHypot15679);
            lv_e1_2_0=ruleAdditiveExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              	        if (current==null) {
              	            current = createModelElementForParent(grammarAccess.getHypotRule());
              	        }
                     		set(
                     			current, 
                     			"e1",
                      		lv_e1_2_0, 
                      		"AdditiveExpression");
              	        afterParserOrEnumRuleCall();
              	    
            }

            }


            }

            otherlv_3=(Token)match(input,53,FOLLOW_53_in_ruleHypot15691); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_3, grammarAccess.getHypotAccess().getCommaKeyword_3());
                  
            }
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6796:1: ( (lv_e2_4_0= ruleAdditiveExpression ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6797:1: (lv_e2_4_0= ruleAdditiveExpression )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6797:1: (lv_e2_4_0= ruleAdditiveExpression )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6798:3: lv_e2_4_0= ruleAdditiveExpression
            {
            if ( state.backtracking==0 ) {
               
              	        newCompositeNode(grammarAccess.getHypotAccess().getE2AdditiveExpressionParserRuleCall_4_0()); 
              	    
            }
            pushFollow(FOLLOW_ruleAdditiveExpression_in_ruleHypot15712);
            lv_e2_4_0=ruleAdditiveExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              	        if (current==null) {
              	            current = createModelElementForParent(grammarAccess.getHypotRule());
              	        }
                     		set(
                     			current, 
                     			"e2",
                      		lv_e2_4_0, 
                      		"AdditiveExpression");
              	        afterParserOrEnumRuleCall();
              	    
            }

            }


            }

            otherlv_5=(Token)match(input,54,FOLLOW_54_in_ruleHypot15724); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_5, grammarAccess.getHypotAccess().getRightParenthesisKeyword_5());
                  
            }

            }


            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleHypot"


    // $ANTLR start "entryRulePow"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6826:1: entryRulePow returns [EObject current=null] : iv_rulePow= rulePow EOF ;
    public final EObject entryRulePow() throws RecognitionException {
        EObject current = null;

        EObject iv_rulePow = null;


        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6827:2: (iv_rulePow= rulePow EOF )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6828:2: iv_rulePow= rulePow EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getPowRule()); 
            }
            pushFollow(FOLLOW_rulePow_in_entryRulePow15760);
            iv_rulePow=rulePow();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_rulePow; 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRulePow15770); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRulePow"


    // $ANTLR start "rulePow"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6835:1: rulePow returns [EObject current=null] : ( ( (lv_BuiltInName_0_0= 'pow' ) ) otherlv_1= '(' ( (lv_e1_2_0= ruleAdditiveExpression ) ) otherlv_3= ',' ( (lv_e2_4_0= ruleAdditiveExpression ) ) otherlv_5= ')' ) ;
    public final EObject rulePow() throws RecognitionException {
        EObject current = null;

        Token lv_BuiltInName_0_0=null;
        Token otherlv_1=null;
        Token otherlv_3=null;
        Token otherlv_5=null;
        EObject lv_e1_2_0 = null;

        EObject lv_e2_4_0 = null;


         enterRule(); 
            
        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6838:28: ( ( ( (lv_BuiltInName_0_0= 'pow' ) ) otherlv_1= '(' ( (lv_e1_2_0= ruleAdditiveExpression ) ) otherlv_3= ',' ( (lv_e2_4_0= ruleAdditiveExpression ) ) otherlv_5= ')' ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6839:1: ( ( (lv_BuiltInName_0_0= 'pow' ) ) otherlv_1= '(' ( (lv_e1_2_0= ruleAdditiveExpression ) ) otherlv_3= ',' ( (lv_e2_4_0= ruleAdditiveExpression ) ) otherlv_5= ')' )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6839:1: ( ( (lv_BuiltInName_0_0= 'pow' ) ) otherlv_1= '(' ( (lv_e1_2_0= ruleAdditiveExpression ) ) otherlv_3= ',' ( (lv_e2_4_0= ruleAdditiveExpression ) ) otherlv_5= ')' )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6839:2: ( (lv_BuiltInName_0_0= 'pow' ) ) otherlv_1= '(' ( (lv_e1_2_0= ruleAdditiveExpression ) ) otherlv_3= ',' ( (lv_e2_4_0= ruleAdditiveExpression ) ) otherlv_5= ')'
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6839:2: ( (lv_BuiltInName_0_0= 'pow' ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6840:1: (lv_BuiltInName_0_0= 'pow' )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6840:1: (lv_BuiltInName_0_0= 'pow' )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6841:3: lv_BuiltInName_0_0= 'pow'
            {
            lv_BuiltInName_0_0=(Token)match(input,129,FOLLOW_129_in_rulePow15813); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                      newLeafNode(lv_BuiltInName_0_0, grammarAccess.getPowAccess().getBuiltInNamePowKeyword_0_0());
                  
            }
            if ( state.backtracking==0 ) {

              	        if (current==null) {
              	            current = createModelElement(grammarAccess.getPowRule());
              	        }
                     		setWithLastConsumed(current, "BuiltInName", lv_BuiltInName_0_0, "pow");
              	    
            }

            }


            }

            otherlv_1=(Token)match(input,52,FOLLOW_52_in_rulePow15838); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_1, grammarAccess.getPowAccess().getLeftParenthesisKeyword_1());
                  
            }
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6858:1: ( (lv_e1_2_0= ruleAdditiveExpression ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6859:1: (lv_e1_2_0= ruleAdditiveExpression )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6859:1: (lv_e1_2_0= ruleAdditiveExpression )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6860:3: lv_e1_2_0= ruleAdditiveExpression
            {
            if ( state.backtracking==0 ) {
               
              	        newCompositeNode(grammarAccess.getPowAccess().getE1AdditiveExpressionParserRuleCall_2_0()); 
              	    
            }
            pushFollow(FOLLOW_ruleAdditiveExpression_in_rulePow15859);
            lv_e1_2_0=ruleAdditiveExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              	        if (current==null) {
              	            current = createModelElementForParent(grammarAccess.getPowRule());
              	        }
                     		set(
                     			current, 
                     			"e1",
                      		lv_e1_2_0, 
                      		"AdditiveExpression");
              	        afterParserOrEnumRuleCall();
              	    
            }

            }


            }

            otherlv_3=(Token)match(input,53,FOLLOW_53_in_rulePow15871); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_3, grammarAccess.getPowAccess().getCommaKeyword_3());
                  
            }
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6880:1: ( (lv_e2_4_0= ruleAdditiveExpression ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6881:1: (lv_e2_4_0= ruleAdditiveExpression )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6881:1: (lv_e2_4_0= ruleAdditiveExpression )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6882:3: lv_e2_4_0= ruleAdditiveExpression
            {
            if ( state.backtracking==0 ) {
               
              	        newCompositeNode(grammarAccess.getPowAccess().getE2AdditiveExpressionParserRuleCall_4_0()); 
              	    
            }
            pushFollow(FOLLOW_ruleAdditiveExpression_in_rulePow15892);
            lv_e2_4_0=ruleAdditiveExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              	        if (current==null) {
              	            current = createModelElementForParent(grammarAccess.getPowRule());
              	        }
                     		set(
                     			current, 
                     			"e2",
                      		lv_e2_4_0, 
                      		"AdditiveExpression");
              	        afterParserOrEnumRuleCall();
              	    
            }

            }


            }

            otherlv_5=(Token)match(input,54,FOLLOW_54_in_rulePow15904); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_5, grammarAccess.getPowAccess().getRightParenthesisKeyword_5());
                  
            }

            }


            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "rulePow"


    // $ANTLR start "entryRuleExp"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6910:1: entryRuleExp returns [EObject current=null] : iv_ruleExp= ruleExp EOF ;
    public final EObject entryRuleExp() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleExp = null;


        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6911:2: (iv_ruleExp= ruleExp EOF )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6912:2: iv_ruleExp= ruleExp EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getExpRule()); 
            }
            pushFollow(FOLLOW_ruleExp_in_entryRuleExp15940);
            iv_ruleExp=ruleExp();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleExp; 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRuleExp15950); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleExp"


    // $ANTLR start "ruleExp"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6919:1: ruleExp returns [EObject current=null] : ( ( (lv_BuiltInName_0_0= 'exp' ) ) otherlv_1= '(' ( (lv_ex_2_0= ruleAdditiveExpression ) ) otherlv_3= ')' ) ;
    public final EObject ruleExp() throws RecognitionException {
        EObject current = null;

        Token lv_BuiltInName_0_0=null;
        Token otherlv_1=null;
        Token otherlv_3=null;
        EObject lv_ex_2_0 = null;


         enterRule(); 
            
        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6922:28: ( ( ( (lv_BuiltInName_0_0= 'exp' ) ) otherlv_1= '(' ( (lv_ex_2_0= ruleAdditiveExpression ) ) otherlv_3= ')' ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6923:1: ( ( (lv_BuiltInName_0_0= 'exp' ) ) otherlv_1= '(' ( (lv_ex_2_0= ruleAdditiveExpression ) ) otherlv_3= ')' )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6923:1: ( ( (lv_BuiltInName_0_0= 'exp' ) ) otherlv_1= '(' ( (lv_ex_2_0= ruleAdditiveExpression ) ) otherlv_3= ')' )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6923:2: ( (lv_BuiltInName_0_0= 'exp' ) ) otherlv_1= '(' ( (lv_ex_2_0= ruleAdditiveExpression ) ) otherlv_3= ')'
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6923:2: ( (lv_BuiltInName_0_0= 'exp' ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6924:1: (lv_BuiltInName_0_0= 'exp' )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6924:1: (lv_BuiltInName_0_0= 'exp' )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6925:3: lv_BuiltInName_0_0= 'exp'
            {
            lv_BuiltInName_0_0=(Token)match(input,130,FOLLOW_130_in_ruleExp15993); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                      newLeafNode(lv_BuiltInName_0_0, grammarAccess.getExpAccess().getBuiltInNameExpKeyword_0_0());
                  
            }
            if ( state.backtracking==0 ) {

              	        if (current==null) {
              	            current = createModelElement(grammarAccess.getExpRule());
              	        }
                     		setWithLastConsumed(current, "BuiltInName", lv_BuiltInName_0_0, "exp");
              	    
            }

            }


            }

            otherlv_1=(Token)match(input,52,FOLLOW_52_in_ruleExp16018); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_1, grammarAccess.getExpAccess().getLeftParenthesisKeyword_1());
                  
            }
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6942:1: ( (lv_ex_2_0= ruleAdditiveExpression ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6943:1: (lv_ex_2_0= ruleAdditiveExpression )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6943:1: (lv_ex_2_0= ruleAdditiveExpression )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6944:3: lv_ex_2_0= ruleAdditiveExpression
            {
            if ( state.backtracking==0 ) {
               
              	        newCompositeNode(grammarAccess.getExpAccess().getExAdditiveExpressionParserRuleCall_2_0()); 
              	    
            }
            pushFollow(FOLLOW_ruleAdditiveExpression_in_ruleExp16039);
            lv_ex_2_0=ruleAdditiveExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              	        if (current==null) {
              	            current = createModelElementForParent(grammarAccess.getExpRule());
              	        }
                     		set(
                     			current, 
                     			"ex",
                      		lv_ex_2_0, 
                      		"AdditiveExpression");
              	        afterParserOrEnumRuleCall();
              	    
            }

            }


            }

            otherlv_3=(Token)match(input,54,FOLLOW_54_in_ruleExp16051); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_3, grammarAccess.getExpAccess().getRightParenthesisKeyword_3());
                  
            }

            }


            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleExp"


    // $ANTLR start "entryRuleLog"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6972:1: entryRuleLog returns [EObject current=null] : iv_ruleLog= ruleLog EOF ;
    public final EObject entryRuleLog() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleLog = null;


        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6973:2: (iv_ruleLog= ruleLog EOF )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6974:2: iv_ruleLog= ruleLog EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getLogRule()); 
            }
            pushFollow(FOLLOW_ruleLog_in_entryRuleLog16087);
            iv_ruleLog=ruleLog();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleLog; 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRuleLog16097); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleLog"


    // $ANTLR start "ruleLog"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6981:1: ruleLog returns [EObject current=null] : ( ( (lv_BuiltInName_0_0= 'log' ) ) otherlv_1= '(' ( (lv_e1_2_0= ruleAdditiveExpression ) ) (otherlv_3= ',' ( (lv_e2_4_0= ruleAdditiveExpression ) ) )? otherlv_5= ')' ) ;
    public final EObject ruleLog() throws RecognitionException {
        EObject current = null;

        Token lv_BuiltInName_0_0=null;
        Token otherlv_1=null;
        Token otherlv_3=null;
        Token otherlv_5=null;
        EObject lv_e1_2_0 = null;

        EObject lv_e2_4_0 = null;


         enterRule(); 
            
        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6984:28: ( ( ( (lv_BuiltInName_0_0= 'log' ) ) otherlv_1= '(' ( (lv_e1_2_0= ruleAdditiveExpression ) ) (otherlv_3= ',' ( (lv_e2_4_0= ruleAdditiveExpression ) ) )? otherlv_5= ')' ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6985:1: ( ( (lv_BuiltInName_0_0= 'log' ) ) otherlv_1= '(' ( (lv_e1_2_0= ruleAdditiveExpression ) ) (otherlv_3= ',' ( (lv_e2_4_0= ruleAdditiveExpression ) ) )? otherlv_5= ')' )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6985:1: ( ( (lv_BuiltInName_0_0= 'log' ) ) otherlv_1= '(' ( (lv_e1_2_0= ruleAdditiveExpression ) ) (otherlv_3= ',' ( (lv_e2_4_0= ruleAdditiveExpression ) ) )? otherlv_5= ')' )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6985:2: ( (lv_BuiltInName_0_0= 'log' ) ) otherlv_1= '(' ( (lv_e1_2_0= ruleAdditiveExpression ) ) (otherlv_3= ',' ( (lv_e2_4_0= ruleAdditiveExpression ) ) )? otherlv_5= ')'
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6985:2: ( (lv_BuiltInName_0_0= 'log' ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6986:1: (lv_BuiltInName_0_0= 'log' )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6986:1: (lv_BuiltInName_0_0= 'log' )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:6987:3: lv_BuiltInName_0_0= 'log'
            {
            lv_BuiltInName_0_0=(Token)match(input,131,FOLLOW_131_in_ruleLog16140); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                      newLeafNode(lv_BuiltInName_0_0, grammarAccess.getLogAccess().getBuiltInNameLogKeyword_0_0());
                  
            }
            if ( state.backtracking==0 ) {

              	        if (current==null) {
              	            current = createModelElement(grammarAccess.getLogRule());
              	        }
                     		setWithLastConsumed(current, "BuiltInName", lv_BuiltInName_0_0, "log");
              	    
            }

            }


            }

            otherlv_1=(Token)match(input,52,FOLLOW_52_in_ruleLog16165); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_1, grammarAccess.getLogAccess().getLeftParenthesisKeyword_1());
                  
            }
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7004:1: ( (lv_e1_2_0= ruleAdditiveExpression ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7005:1: (lv_e1_2_0= ruleAdditiveExpression )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7005:1: (lv_e1_2_0= ruleAdditiveExpression )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7006:3: lv_e1_2_0= ruleAdditiveExpression
            {
            if ( state.backtracking==0 ) {
               
              	        newCompositeNode(grammarAccess.getLogAccess().getE1AdditiveExpressionParserRuleCall_2_0()); 
              	    
            }
            pushFollow(FOLLOW_ruleAdditiveExpression_in_ruleLog16186);
            lv_e1_2_0=ruleAdditiveExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              	        if (current==null) {
              	            current = createModelElementForParent(grammarAccess.getLogRule());
              	        }
                     		set(
                     			current, 
                     			"e1",
                      		lv_e1_2_0, 
                      		"AdditiveExpression");
              	        afterParserOrEnumRuleCall();
              	    
            }

            }


            }

            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7022:2: (otherlv_3= ',' ( (lv_e2_4_0= ruleAdditiveExpression ) ) )?
            int alt82=2;
            int LA82_0 = input.LA(1);

            if ( (LA82_0==53) ) {
                alt82=1;
            }
            switch (alt82) {
                case 1 :
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7022:4: otherlv_3= ',' ( (lv_e2_4_0= ruleAdditiveExpression ) )
                    {
                    otherlv_3=(Token)match(input,53,FOLLOW_53_in_ruleLog16199); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                          	newLeafNode(otherlv_3, grammarAccess.getLogAccess().getCommaKeyword_3_0());
                          
                    }
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7026:1: ( (lv_e2_4_0= ruleAdditiveExpression ) )
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7027:1: (lv_e2_4_0= ruleAdditiveExpression )
                    {
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7027:1: (lv_e2_4_0= ruleAdditiveExpression )
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7028:3: lv_e2_4_0= ruleAdditiveExpression
                    {
                    if ( state.backtracking==0 ) {
                       
                      	        newCompositeNode(grammarAccess.getLogAccess().getE2AdditiveExpressionParserRuleCall_3_1_0()); 
                      	    
                    }
                    pushFollow(FOLLOW_ruleAdditiveExpression_in_ruleLog16220);
                    lv_e2_4_0=ruleAdditiveExpression();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      	        if (current==null) {
                      	            current = createModelElementForParent(grammarAccess.getLogRule());
                      	        }
                             		add(
                             			current, 
                             			"e2",
                              		lv_e2_4_0, 
                              		"AdditiveExpression");
                      	        afterParserOrEnumRuleCall();
                      	    
                    }

                    }


                    }


                    }
                    break;

            }

            otherlv_5=(Token)match(input,54,FOLLOW_54_in_ruleLog16234); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_5, grammarAccess.getLogAccess().getRightParenthesisKeyword_4());
                  
            }

            }


            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleLog"


    // $ANTLR start "entryRuleErf"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7056:1: entryRuleErf returns [EObject current=null] : iv_ruleErf= ruleErf EOF ;
    public final EObject entryRuleErf() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleErf = null;


        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7057:2: (iv_ruleErf= ruleErf EOF )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7058:2: iv_ruleErf= ruleErf EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getErfRule()); 
            }
            pushFollow(FOLLOW_ruleErf_in_entryRuleErf16270);
            iv_ruleErf=ruleErf();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleErf; 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRuleErf16280); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleErf"


    // $ANTLR start "ruleErf"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7065:1: ruleErf returns [EObject current=null] : ( ( (lv_BuiltInName_0_0= 'erf' ) ) otherlv_1= '(' ( (lv_ex_2_0= ruleAdditiveExpression ) ) otherlv_3= ')' ) ;
    public final EObject ruleErf() throws RecognitionException {
        EObject current = null;

        Token lv_BuiltInName_0_0=null;
        Token otherlv_1=null;
        Token otherlv_3=null;
        EObject lv_ex_2_0 = null;


         enterRule(); 
            
        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7068:28: ( ( ( (lv_BuiltInName_0_0= 'erf' ) ) otherlv_1= '(' ( (lv_ex_2_0= ruleAdditiveExpression ) ) otherlv_3= ')' ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7069:1: ( ( (lv_BuiltInName_0_0= 'erf' ) ) otherlv_1= '(' ( (lv_ex_2_0= ruleAdditiveExpression ) ) otherlv_3= ')' )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7069:1: ( ( (lv_BuiltInName_0_0= 'erf' ) ) otherlv_1= '(' ( (lv_ex_2_0= ruleAdditiveExpression ) ) otherlv_3= ')' )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7069:2: ( (lv_BuiltInName_0_0= 'erf' ) ) otherlv_1= '(' ( (lv_ex_2_0= ruleAdditiveExpression ) ) otherlv_3= ')'
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7069:2: ( (lv_BuiltInName_0_0= 'erf' ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7070:1: (lv_BuiltInName_0_0= 'erf' )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7070:1: (lv_BuiltInName_0_0= 'erf' )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7071:3: lv_BuiltInName_0_0= 'erf'
            {
            lv_BuiltInName_0_0=(Token)match(input,132,FOLLOW_132_in_ruleErf16323); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                      newLeafNode(lv_BuiltInName_0_0, grammarAccess.getErfAccess().getBuiltInNameErfKeyword_0_0());
                  
            }
            if ( state.backtracking==0 ) {

              	        if (current==null) {
              	            current = createModelElement(grammarAccess.getErfRule());
              	        }
                     		setWithLastConsumed(current, "BuiltInName", lv_BuiltInName_0_0, "erf");
              	    
            }

            }


            }

            otherlv_1=(Token)match(input,52,FOLLOW_52_in_ruleErf16348); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_1, grammarAccess.getErfAccess().getLeftParenthesisKeyword_1());
                  
            }
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7088:1: ( (lv_ex_2_0= ruleAdditiveExpression ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7089:1: (lv_ex_2_0= ruleAdditiveExpression )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7089:1: (lv_ex_2_0= ruleAdditiveExpression )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7090:3: lv_ex_2_0= ruleAdditiveExpression
            {
            if ( state.backtracking==0 ) {
               
              	        newCompositeNode(grammarAccess.getErfAccess().getExAdditiveExpressionParserRuleCall_2_0()); 
              	    
            }
            pushFollow(FOLLOW_ruleAdditiveExpression_in_ruleErf16369);
            lv_ex_2_0=ruleAdditiveExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              	        if (current==null) {
              	            current = createModelElementForParent(grammarAccess.getErfRule());
              	        }
                     		set(
                     			current, 
                     			"ex",
                      		lv_ex_2_0, 
                      		"AdditiveExpression");
              	        afterParserOrEnumRuleCall();
              	    
            }

            }


            }

            otherlv_3=(Token)match(input,54,FOLLOW_54_in_ruleErf16381); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_3, grammarAccess.getErfAccess().getRightParenthesisKeyword_3());
                  
            }

            }


            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleErf"


    // $ANTLR start "entryRuleGamma"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7118:1: entryRuleGamma returns [EObject current=null] : iv_ruleGamma= ruleGamma EOF ;
    public final EObject entryRuleGamma() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleGamma = null;


        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7119:2: (iv_ruleGamma= ruleGamma EOF )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7120:2: iv_ruleGamma= ruleGamma EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getGammaRule()); 
            }
            pushFollow(FOLLOW_ruleGamma_in_entryRuleGamma16417);
            iv_ruleGamma=ruleGamma();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleGamma; 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRuleGamma16427); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleGamma"


    // $ANTLR start "ruleGamma"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7127:1: ruleGamma returns [EObject current=null] : ( ( (lv_BuiltInName_0_0= 'gamma' ) ) otherlv_1= '(' ( (lv_ex_2_0= ruleAdditiveExpression ) ) otherlv_3= ')' ) ;
    public final EObject ruleGamma() throws RecognitionException {
        EObject current = null;

        Token lv_BuiltInName_0_0=null;
        Token otherlv_1=null;
        Token otherlv_3=null;
        EObject lv_ex_2_0 = null;


         enterRule(); 
            
        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7130:28: ( ( ( (lv_BuiltInName_0_0= 'gamma' ) ) otherlv_1= '(' ( (lv_ex_2_0= ruleAdditiveExpression ) ) otherlv_3= ')' ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7131:1: ( ( (lv_BuiltInName_0_0= 'gamma' ) ) otherlv_1= '(' ( (lv_ex_2_0= ruleAdditiveExpression ) ) otherlv_3= ')' )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7131:1: ( ( (lv_BuiltInName_0_0= 'gamma' ) ) otherlv_1= '(' ( (lv_ex_2_0= ruleAdditiveExpression ) ) otherlv_3= ')' )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7131:2: ( (lv_BuiltInName_0_0= 'gamma' ) ) otherlv_1= '(' ( (lv_ex_2_0= ruleAdditiveExpression ) ) otherlv_3= ')'
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7131:2: ( (lv_BuiltInName_0_0= 'gamma' ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7132:1: (lv_BuiltInName_0_0= 'gamma' )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7132:1: (lv_BuiltInName_0_0= 'gamma' )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7133:3: lv_BuiltInName_0_0= 'gamma'
            {
            lv_BuiltInName_0_0=(Token)match(input,133,FOLLOW_133_in_ruleGamma16470); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                      newLeafNode(lv_BuiltInName_0_0, grammarAccess.getGammaAccess().getBuiltInNameGammaKeyword_0_0());
                  
            }
            if ( state.backtracking==0 ) {

              	        if (current==null) {
              	            current = createModelElement(grammarAccess.getGammaRule());
              	        }
                     		setWithLastConsumed(current, "BuiltInName", lv_BuiltInName_0_0, "gamma");
              	    
            }

            }


            }

            otherlv_1=(Token)match(input,52,FOLLOW_52_in_ruleGamma16495); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_1, grammarAccess.getGammaAccess().getLeftParenthesisKeyword_1());
                  
            }
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7150:1: ( (lv_ex_2_0= ruleAdditiveExpression ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7151:1: (lv_ex_2_0= ruleAdditiveExpression )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7151:1: (lv_ex_2_0= ruleAdditiveExpression )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7152:3: lv_ex_2_0= ruleAdditiveExpression
            {
            if ( state.backtracking==0 ) {
               
              	        newCompositeNode(grammarAccess.getGammaAccess().getExAdditiveExpressionParserRuleCall_2_0()); 
              	    
            }
            pushFollow(FOLLOW_ruleAdditiveExpression_in_ruleGamma16516);
            lv_ex_2_0=ruleAdditiveExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              	        if (current==null) {
              	            current = createModelElementForParent(grammarAccess.getGammaRule());
              	        }
                     		set(
                     			current, 
                     			"ex",
                      		lv_ex_2_0, 
                      		"AdditiveExpression");
              	        afterParserOrEnumRuleCall();
              	    
            }

            }


            }

            otherlv_3=(Token)match(input,54,FOLLOW_54_in_ruleGamma16528); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_3, grammarAccess.getGammaAccess().getRightParenthesisKeyword_3());
                  
            }

            }


            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleGamma"


    // $ANTLR start "entryRuleMax"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7180:1: entryRuleMax returns [EObject current=null] : iv_ruleMax= ruleMax EOF ;
    public final EObject entryRuleMax() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleMax = null;


        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7181:2: (iv_ruleMax= ruleMax EOF )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7182:2: iv_ruleMax= ruleMax EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getMaxRule()); 
            }
            pushFollow(FOLLOW_ruleMax_in_entryRuleMax16564);
            iv_ruleMax=ruleMax();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleMax; 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRuleMax16574); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleMax"


    // $ANTLR start "ruleMax"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7189:1: ruleMax returns [EObject current=null] : ( ( (lv_BuiltInName_0_0= 'max' ) ) otherlv_1= '(' ( (lv_e1_2_0= ruleAdditiveExpression ) ) (otherlv_3= ',' ( (lv_e2_4_0= ruleAdditiveExpression ) ) )* otherlv_5= ')' ) ;
    public final EObject ruleMax() throws RecognitionException {
        EObject current = null;

        Token lv_BuiltInName_0_0=null;
        Token otherlv_1=null;
        Token otherlv_3=null;
        Token otherlv_5=null;
        EObject lv_e1_2_0 = null;

        EObject lv_e2_4_0 = null;


         enterRule(); 
            
        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7192:28: ( ( ( (lv_BuiltInName_0_0= 'max' ) ) otherlv_1= '(' ( (lv_e1_2_0= ruleAdditiveExpression ) ) (otherlv_3= ',' ( (lv_e2_4_0= ruleAdditiveExpression ) ) )* otherlv_5= ')' ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7193:1: ( ( (lv_BuiltInName_0_0= 'max' ) ) otherlv_1= '(' ( (lv_e1_2_0= ruleAdditiveExpression ) ) (otherlv_3= ',' ( (lv_e2_4_0= ruleAdditiveExpression ) ) )* otherlv_5= ')' )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7193:1: ( ( (lv_BuiltInName_0_0= 'max' ) ) otherlv_1= '(' ( (lv_e1_2_0= ruleAdditiveExpression ) ) (otherlv_3= ',' ( (lv_e2_4_0= ruleAdditiveExpression ) ) )* otherlv_5= ')' )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7193:2: ( (lv_BuiltInName_0_0= 'max' ) ) otherlv_1= '(' ( (lv_e1_2_0= ruleAdditiveExpression ) ) (otherlv_3= ',' ( (lv_e2_4_0= ruleAdditiveExpression ) ) )* otherlv_5= ')'
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7193:2: ( (lv_BuiltInName_0_0= 'max' ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7194:1: (lv_BuiltInName_0_0= 'max' )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7194:1: (lv_BuiltInName_0_0= 'max' )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7195:3: lv_BuiltInName_0_0= 'max'
            {
            lv_BuiltInName_0_0=(Token)match(input,134,FOLLOW_134_in_ruleMax16617); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                      newLeafNode(lv_BuiltInName_0_0, grammarAccess.getMaxAccess().getBuiltInNameMaxKeyword_0_0());
                  
            }
            if ( state.backtracking==0 ) {

              	        if (current==null) {
              	            current = createModelElement(grammarAccess.getMaxRule());
              	        }
                     		setWithLastConsumed(current, "BuiltInName", lv_BuiltInName_0_0, "max");
              	    
            }

            }


            }

            otherlv_1=(Token)match(input,52,FOLLOW_52_in_ruleMax16642); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_1, grammarAccess.getMaxAccess().getLeftParenthesisKeyword_1());
                  
            }
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7212:1: ( (lv_e1_2_0= ruleAdditiveExpression ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7213:1: (lv_e1_2_0= ruleAdditiveExpression )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7213:1: (lv_e1_2_0= ruleAdditiveExpression )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7214:3: lv_e1_2_0= ruleAdditiveExpression
            {
            if ( state.backtracking==0 ) {
               
              	        newCompositeNode(grammarAccess.getMaxAccess().getE1AdditiveExpressionParserRuleCall_2_0()); 
              	    
            }
            pushFollow(FOLLOW_ruleAdditiveExpression_in_ruleMax16663);
            lv_e1_2_0=ruleAdditiveExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              	        if (current==null) {
              	            current = createModelElementForParent(grammarAccess.getMaxRule());
              	        }
                     		set(
                     			current, 
                     			"e1",
                      		lv_e1_2_0, 
                      		"AdditiveExpression");
              	        afterParserOrEnumRuleCall();
              	    
            }

            }


            }

            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7230:2: (otherlv_3= ',' ( (lv_e2_4_0= ruleAdditiveExpression ) ) )*
            loop83:
            do {
                int alt83=2;
                int LA83_0 = input.LA(1);

                if ( (LA83_0==53) ) {
                    alt83=1;
                }


                switch (alt83) {
            	case 1 :
            	    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7230:4: otherlv_3= ',' ( (lv_e2_4_0= ruleAdditiveExpression ) )
            	    {
            	    otherlv_3=(Token)match(input,53,FOLLOW_53_in_ruleMax16676); if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	          	newLeafNode(otherlv_3, grammarAccess.getMaxAccess().getCommaKeyword_3_0());
            	          
            	    }
            	    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7234:1: ( (lv_e2_4_0= ruleAdditiveExpression ) )
            	    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7235:1: (lv_e2_4_0= ruleAdditiveExpression )
            	    {
            	    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7235:1: (lv_e2_4_0= ruleAdditiveExpression )
            	    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7236:3: lv_e2_4_0= ruleAdditiveExpression
            	    {
            	    if ( state.backtracking==0 ) {
            	       
            	      	        newCompositeNode(grammarAccess.getMaxAccess().getE2AdditiveExpressionParserRuleCall_3_1_0()); 
            	      	    
            	    }
            	    pushFollow(FOLLOW_ruleAdditiveExpression_in_ruleMax16697);
            	    lv_e2_4_0=ruleAdditiveExpression();

            	    state._fsp--;
            	    if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      	        if (current==null) {
            	      	            current = createModelElementForParent(grammarAccess.getMaxRule());
            	      	        }
            	             		add(
            	             			current, 
            	             			"e2",
            	              		lv_e2_4_0, 
            	              		"AdditiveExpression");
            	      	        afterParserOrEnumRuleCall();
            	      	    
            	    }

            	    }


            	    }


            	    }
            	    break;

            	default :
            	    break loop83;
                }
            } while (true);

            otherlv_5=(Token)match(input,54,FOLLOW_54_in_ruleMax16711); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_5, grammarAccess.getMaxAccess().getRightParenthesisKeyword_4());
                  
            }

            }


            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleMax"


    // $ANTLR start "entryRuleMin"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7264:1: entryRuleMin returns [EObject current=null] : iv_ruleMin= ruleMin EOF ;
    public final EObject entryRuleMin() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleMin = null;


        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7265:2: (iv_ruleMin= ruleMin EOF )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7266:2: iv_ruleMin= ruleMin EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getMinRule()); 
            }
            pushFollow(FOLLOW_ruleMin_in_entryRuleMin16747);
            iv_ruleMin=ruleMin();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleMin; 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRuleMin16757); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleMin"


    // $ANTLR start "ruleMin"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7273:1: ruleMin returns [EObject current=null] : ( ( (lv_BuiltInName_0_0= 'min' ) ) otherlv_1= '(' ( (lv_e1_2_0= ruleAdditiveExpression ) ) (otherlv_3= ',' ( (lv_e2_4_0= ruleAdditiveExpression ) ) )* otherlv_5= ')' ) ;
    public final EObject ruleMin() throws RecognitionException {
        EObject current = null;

        Token lv_BuiltInName_0_0=null;
        Token otherlv_1=null;
        Token otherlv_3=null;
        Token otherlv_5=null;
        EObject lv_e1_2_0 = null;

        EObject lv_e2_4_0 = null;


         enterRule(); 
            
        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7276:28: ( ( ( (lv_BuiltInName_0_0= 'min' ) ) otherlv_1= '(' ( (lv_e1_2_0= ruleAdditiveExpression ) ) (otherlv_3= ',' ( (lv_e2_4_0= ruleAdditiveExpression ) ) )* otherlv_5= ')' ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7277:1: ( ( (lv_BuiltInName_0_0= 'min' ) ) otherlv_1= '(' ( (lv_e1_2_0= ruleAdditiveExpression ) ) (otherlv_3= ',' ( (lv_e2_4_0= ruleAdditiveExpression ) ) )* otherlv_5= ')' )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7277:1: ( ( (lv_BuiltInName_0_0= 'min' ) ) otherlv_1= '(' ( (lv_e1_2_0= ruleAdditiveExpression ) ) (otherlv_3= ',' ( (lv_e2_4_0= ruleAdditiveExpression ) ) )* otherlv_5= ')' )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7277:2: ( (lv_BuiltInName_0_0= 'min' ) ) otherlv_1= '(' ( (lv_e1_2_0= ruleAdditiveExpression ) ) (otherlv_3= ',' ( (lv_e2_4_0= ruleAdditiveExpression ) ) )* otherlv_5= ')'
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7277:2: ( (lv_BuiltInName_0_0= 'min' ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7278:1: (lv_BuiltInName_0_0= 'min' )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7278:1: (lv_BuiltInName_0_0= 'min' )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7279:3: lv_BuiltInName_0_0= 'min'
            {
            lv_BuiltInName_0_0=(Token)match(input,135,FOLLOW_135_in_ruleMin16800); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                      newLeafNode(lv_BuiltInName_0_0, grammarAccess.getMinAccess().getBuiltInNameMinKeyword_0_0());
                  
            }
            if ( state.backtracking==0 ) {

              	        if (current==null) {
              	            current = createModelElement(grammarAccess.getMinRule());
              	        }
                     		setWithLastConsumed(current, "BuiltInName", lv_BuiltInName_0_0, "min");
              	    
            }

            }


            }

            otherlv_1=(Token)match(input,52,FOLLOW_52_in_ruleMin16825); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_1, grammarAccess.getMinAccess().getLeftParenthesisKeyword_1());
                  
            }
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7296:1: ( (lv_e1_2_0= ruleAdditiveExpression ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7297:1: (lv_e1_2_0= ruleAdditiveExpression )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7297:1: (lv_e1_2_0= ruleAdditiveExpression )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7298:3: lv_e1_2_0= ruleAdditiveExpression
            {
            if ( state.backtracking==0 ) {
               
              	        newCompositeNode(grammarAccess.getMinAccess().getE1AdditiveExpressionParserRuleCall_2_0()); 
              	    
            }
            pushFollow(FOLLOW_ruleAdditiveExpression_in_ruleMin16846);
            lv_e1_2_0=ruleAdditiveExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              	        if (current==null) {
              	            current = createModelElementForParent(grammarAccess.getMinRule());
              	        }
                     		set(
                     			current, 
                     			"e1",
                      		lv_e1_2_0, 
                      		"AdditiveExpression");
              	        afterParserOrEnumRuleCall();
              	    
            }

            }


            }

            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7314:2: (otherlv_3= ',' ( (lv_e2_4_0= ruleAdditiveExpression ) ) )*
            loop84:
            do {
                int alt84=2;
                int LA84_0 = input.LA(1);

                if ( (LA84_0==53) ) {
                    alt84=1;
                }


                switch (alt84) {
            	case 1 :
            	    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7314:4: otherlv_3= ',' ( (lv_e2_4_0= ruleAdditiveExpression ) )
            	    {
            	    otherlv_3=(Token)match(input,53,FOLLOW_53_in_ruleMin16859); if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	          	newLeafNode(otherlv_3, grammarAccess.getMinAccess().getCommaKeyword_3_0());
            	          
            	    }
            	    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7318:1: ( (lv_e2_4_0= ruleAdditiveExpression ) )
            	    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7319:1: (lv_e2_4_0= ruleAdditiveExpression )
            	    {
            	    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7319:1: (lv_e2_4_0= ruleAdditiveExpression )
            	    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7320:3: lv_e2_4_0= ruleAdditiveExpression
            	    {
            	    if ( state.backtracking==0 ) {
            	       
            	      	        newCompositeNode(grammarAccess.getMinAccess().getE2AdditiveExpressionParserRuleCall_3_1_0()); 
            	      	    
            	    }
            	    pushFollow(FOLLOW_ruleAdditiveExpression_in_ruleMin16880);
            	    lv_e2_4_0=ruleAdditiveExpression();

            	    state._fsp--;
            	    if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      	        if (current==null) {
            	      	            current = createModelElementForParent(grammarAccess.getMinRule());
            	      	        }
            	             		add(
            	             			current, 
            	             			"e2",
            	              		lv_e2_4_0, 
            	              		"AdditiveExpression");
            	      	        afterParserOrEnumRuleCall();
            	      	    
            	    }

            	    }


            	    }


            	    }
            	    break;

            	default :
            	    break loop84;
                }
            } while (true);

            otherlv_5=(Token)match(input,54,FOLLOW_54_in_ruleMin16894); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_5, grammarAccess.getMinAccess().getRightParenthesisKeyword_4());
                  
            }

            }


            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleMin"


    // $ANTLR start "entryRulePause"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7348:1: entryRulePause returns [EObject current=null] : iv_rulePause= rulePause EOF ;
    public final EObject entryRulePause() throws RecognitionException {
        EObject current = null;

        EObject iv_rulePause = null;


        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7349:2: (iv_rulePause= rulePause EOF )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7350:2: iv_rulePause= rulePause EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getPauseRule()); 
            }
            pushFollow(FOLLOW_rulePause_in_entryRulePause16930);
            iv_rulePause=rulePause();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_rulePause; 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRulePause16940); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRulePause"


    // $ANTLR start "rulePause"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7357:1: rulePause returns [EObject current=null] : ( ( (lv_BuiltInName_0_0= 'pause' ) ) otherlv_1= '(' ( (lv_ex_2_0= ruleAdditiveExpression ) ) otherlv_3= ')' ) ;
    public final EObject rulePause() throws RecognitionException {
        EObject current = null;

        Token lv_BuiltInName_0_0=null;
        Token otherlv_1=null;
        Token otherlv_3=null;
        EObject lv_ex_2_0 = null;


         enterRule(); 
            
        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7360:28: ( ( ( (lv_BuiltInName_0_0= 'pause' ) ) otherlv_1= '(' ( (lv_ex_2_0= ruleAdditiveExpression ) ) otherlv_3= ')' ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7361:1: ( ( (lv_BuiltInName_0_0= 'pause' ) ) otherlv_1= '(' ( (lv_ex_2_0= ruleAdditiveExpression ) ) otherlv_3= ')' )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7361:1: ( ( (lv_BuiltInName_0_0= 'pause' ) ) otherlv_1= '(' ( (lv_ex_2_0= ruleAdditiveExpression ) ) otherlv_3= ')' )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7361:2: ( (lv_BuiltInName_0_0= 'pause' ) ) otherlv_1= '(' ( (lv_ex_2_0= ruleAdditiveExpression ) ) otherlv_3= ')'
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7361:2: ( (lv_BuiltInName_0_0= 'pause' ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7362:1: (lv_BuiltInName_0_0= 'pause' )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7362:1: (lv_BuiltInName_0_0= 'pause' )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7363:3: lv_BuiltInName_0_0= 'pause'
            {
            lv_BuiltInName_0_0=(Token)match(input,136,FOLLOW_136_in_rulePause16983); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                      newLeafNode(lv_BuiltInName_0_0, grammarAccess.getPauseAccess().getBuiltInNamePauseKeyword_0_0());
                  
            }
            if ( state.backtracking==0 ) {

              	        if (current==null) {
              	            current = createModelElement(grammarAccess.getPauseRule());
              	        }
                     		setWithLastConsumed(current, "BuiltInName", lv_BuiltInName_0_0, "pause");
              	    
            }

            }


            }

            otherlv_1=(Token)match(input,52,FOLLOW_52_in_rulePause17008); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_1, grammarAccess.getPauseAccess().getLeftParenthesisKeyword_1());
                  
            }
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7380:1: ( (lv_ex_2_0= ruleAdditiveExpression ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7381:1: (lv_ex_2_0= ruleAdditiveExpression )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7381:1: (lv_ex_2_0= ruleAdditiveExpression )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7382:3: lv_ex_2_0= ruleAdditiveExpression
            {
            if ( state.backtracking==0 ) {
               
              	        newCompositeNode(grammarAccess.getPauseAccess().getExAdditiveExpressionParserRuleCall_2_0()); 
              	    
            }
            pushFollow(FOLLOW_ruleAdditiveExpression_in_rulePause17029);
            lv_ex_2_0=ruleAdditiveExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              	        if (current==null) {
              	            current = createModelElementForParent(grammarAccess.getPauseRule());
              	        }
                     		set(
                     			current, 
                     			"ex",
                      		lv_ex_2_0, 
                      		"AdditiveExpression");
              	        afterParserOrEnumRuleCall();
              	    
            }

            }


            }

            otherlv_3=(Token)match(input,54,FOLLOW_54_in_rulePause17041); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_3, grammarAccess.getPauseAccess().getRightParenthesisKeyword_3());
                  
            }

            }


            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "rulePause"


    // $ANTLR start "entryRuleSize"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7410:1: entryRuleSize returns [EObject current=null] : iv_ruleSize= ruleSize EOF ;
    public final EObject entryRuleSize() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleSize = null;


        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7411:2: (iv_ruleSize= ruleSize EOF )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7412:2: iv_ruleSize= ruleSize EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getSizeRule()); 
            }
            pushFollow(FOLLOW_ruleSize_in_entryRuleSize17077);
            iv_ruleSize=ruleSize();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleSize; 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRuleSize17087); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleSize"


    // $ANTLR start "ruleSize"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7419:1: ruleSize returns [EObject current=null] : ( ( (lv_BuiltInName_0_0= 'size' ) ) otherlv_1= '(' ( (lv_ex_2_0= ruleAdditiveExpression ) ) otherlv_3= ')' ) ;
    public final EObject ruleSize() throws RecognitionException {
        EObject current = null;

        Token lv_BuiltInName_0_0=null;
        Token otherlv_1=null;
        Token otherlv_3=null;
        EObject lv_ex_2_0 = null;


         enterRule(); 
            
        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7422:28: ( ( ( (lv_BuiltInName_0_0= 'size' ) ) otherlv_1= '(' ( (lv_ex_2_0= ruleAdditiveExpression ) ) otherlv_3= ')' ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7423:1: ( ( (lv_BuiltInName_0_0= 'size' ) ) otherlv_1= '(' ( (lv_ex_2_0= ruleAdditiveExpression ) ) otherlv_3= ')' )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7423:1: ( ( (lv_BuiltInName_0_0= 'size' ) ) otherlv_1= '(' ( (lv_ex_2_0= ruleAdditiveExpression ) ) otherlv_3= ')' )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7423:2: ( (lv_BuiltInName_0_0= 'size' ) ) otherlv_1= '(' ( (lv_ex_2_0= ruleAdditiveExpression ) ) otherlv_3= ')'
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7423:2: ( (lv_BuiltInName_0_0= 'size' ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7424:1: (lv_BuiltInName_0_0= 'size' )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7424:1: (lv_BuiltInName_0_0= 'size' )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7425:3: lv_BuiltInName_0_0= 'size'
            {
            lv_BuiltInName_0_0=(Token)match(input,137,FOLLOW_137_in_ruleSize17130); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                      newLeafNode(lv_BuiltInName_0_0, grammarAccess.getSizeAccess().getBuiltInNameSizeKeyword_0_0());
                  
            }
            if ( state.backtracking==0 ) {

              	        if (current==null) {
              	            current = createModelElement(grammarAccess.getSizeRule());
              	        }
                     		setWithLastConsumed(current, "BuiltInName", lv_BuiltInName_0_0, "size");
              	    
            }

            }


            }

            otherlv_1=(Token)match(input,52,FOLLOW_52_in_ruleSize17155); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_1, grammarAccess.getSizeAccess().getLeftParenthesisKeyword_1());
                  
            }
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7442:1: ( (lv_ex_2_0= ruleAdditiveExpression ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7443:1: (lv_ex_2_0= ruleAdditiveExpression )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7443:1: (lv_ex_2_0= ruleAdditiveExpression )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7444:3: lv_ex_2_0= ruleAdditiveExpression
            {
            if ( state.backtracking==0 ) {
               
              	        newCompositeNode(grammarAccess.getSizeAccess().getExAdditiveExpressionParserRuleCall_2_0()); 
              	    
            }
            pushFollow(FOLLOW_ruleAdditiveExpression_in_ruleSize17176);
            lv_ex_2_0=ruleAdditiveExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              	        if (current==null) {
              	            current = createModelElementForParent(grammarAccess.getSizeRule());
              	        }
                     		set(
                     			current, 
                     			"ex",
                      		lv_ex_2_0, 
                      		"AdditiveExpression");
              	        afterParserOrEnumRuleCall();
              	    
            }

            }


            }

            otherlv_3=(Token)match(input,54,FOLLOW_54_in_ruleSize17188); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_3, grammarAccess.getSizeAccess().getRightParenthesisKeyword_3());
                  
            }

            }


            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleSize"


    // $ANTLR start "entryRuleInvariantBlock"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7472:1: entryRuleInvariantBlock returns [EObject current=null] : iv_ruleInvariantBlock= ruleInvariantBlock EOF ;
    public final EObject entryRuleInvariantBlock() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleInvariantBlock = null;


        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7473:2: (iv_ruleInvariantBlock= ruleInvariantBlock EOF )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7474:2: iv_ruleInvariantBlock= ruleInvariantBlock EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getInvariantBlockRule()); 
            }
            pushFollow(FOLLOW_ruleInvariantBlock_in_entryRuleInvariantBlock17224);
            iv_ruleInvariantBlock=ruleInvariantBlock();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleInvariantBlock; 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRuleInvariantBlock17234); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleInvariantBlock"


    // $ANTLR start "ruleInvariantBlock"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7481:1: ruleInvariantBlock returns [EObject current=null] : ( ( (lv_name_0_0= 'Invariant' ) ) otherlv_1= '{' ( ( (lv_conditions_2_0= ruleConditionalExpression ) ) otherlv_3= ';' )* otherlv_4= '}' otherlv_5= ';' ) ;
    public final EObject ruleInvariantBlock() throws RecognitionException {
        EObject current = null;

        Token lv_name_0_0=null;
        Token otherlv_1=null;
        Token otherlv_3=null;
        Token otherlv_4=null;
        Token otherlv_5=null;
        EObject lv_conditions_2_0 = null;


         enterRule(); 
            
        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7484:28: ( ( ( (lv_name_0_0= 'Invariant' ) ) otherlv_1= '{' ( ( (lv_conditions_2_0= ruleConditionalExpression ) ) otherlv_3= ';' )* otherlv_4= '}' otherlv_5= ';' ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7485:1: ( ( (lv_name_0_0= 'Invariant' ) ) otherlv_1= '{' ( ( (lv_conditions_2_0= ruleConditionalExpression ) ) otherlv_3= ';' )* otherlv_4= '}' otherlv_5= ';' )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7485:1: ( ( (lv_name_0_0= 'Invariant' ) ) otherlv_1= '{' ( ( (lv_conditions_2_0= ruleConditionalExpression ) ) otherlv_3= ';' )* otherlv_4= '}' otherlv_5= ';' )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7485:2: ( (lv_name_0_0= 'Invariant' ) ) otherlv_1= '{' ( ( (lv_conditions_2_0= ruleConditionalExpression ) ) otherlv_3= ';' )* otherlv_4= '}' otherlv_5= ';'
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7485:2: ( (lv_name_0_0= 'Invariant' ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7486:1: (lv_name_0_0= 'Invariant' )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7486:1: (lv_name_0_0= 'Invariant' )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7487:3: lv_name_0_0= 'Invariant'
            {
            lv_name_0_0=(Token)match(input,66,FOLLOW_66_in_ruleInvariantBlock17277); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                      newLeafNode(lv_name_0_0, grammarAccess.getInvariantBlockAccess().getNameInvariantKeyword_0_0());
                  
            }
            if ( state.backtracking==0 ) {

              	        if (current==null) {
              	            current = createModelElement(grammarAccess.getInvariantBlockRule());
              	        }
                     		setWithLastConsumed(current, "name", lv_name_0_0, "Invariant");
              	    
            }

            }


            }

            otherlv_1=(Token)match(input,47,FOLLOW_47_in_ruleInvariantBlock17302); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_1, grammarAccess.getInvariantBlockAccess().getLeftCurlyBracketKeyword_1());
                  
            }
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7504:1: ( ( (lv_conditions_2_0= ruleConditionalExpression ) ) otherlv_3= ';' )*
            loop85:
            do {
                int alt85=2;
                int LA85_0 = input.LA(1);

                if ( (LA85_0==RULE_ID||(LA85_0>=RULE_FLOATING_POINT_LITERAL && LA85_0<=RULE_DECIMAL_LITERAL)||LA85_0==52||LA85_0==57||(LA85_0>=89 && LA85_0<=90)||(LA85_0>=94 && LA85_0<=97)||(LA85_0>=102 && LA85_0<=106)||(LA85_0>=109 && LA85_0<=137)||LA85_0==145) ) {
                    alt85=1;
                }


                switch (alt85) {
            	case 1 :
            	    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7504:2: ( (lv_conditions_2_0= ruleConditionalExpression ) ) otherlv_3= ';'
            	    {
            	    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7504:2: ( (lv_conditions_2_0= ruleConditionalExpression ) )
            	    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7505:1: (lv_conditions_2_0= ruleConditionalExpression )
            	    {
            	    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7505:1: (lv_conditions_2_0= ruleConditionalExpression )
            	    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7506:3: lv_conditions_2_0= ruleConditionalExpression
            	    {
            	    if ( state.backtracking==0 ) {
            	       
            	      	        newCompositeNode(grammarAccess.getInvariantBlockAccess().getConditionsConditionalExpressionParserRuleCall_2_0_0()); 
            	      	    
            	    }
            	    pushFollow(FOLLOW_ruleConditionalExpression_in_ruleInvariantBlock17324);
            	    lv_conditions_2_0=ruleConditionalExpression();

            	    state._fsp--;
            	    if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      	        if (current==null) {
            	      	            current = createModelElementForParent(grammarAccess.getInvariantBlockRule());
            	      	        }
            	             		add(
            	             			current, 
            	             			"conditions",
            	              		lv_conditions_2_0, 
            	              		"ConditionalExpression");
            	      	        afterParserOrEnumRuleCall();
            	      	    
            	    }

            	    }


            	    }

            	    otherlv_3=(Token)match(input,29,FOLLOW_29_in_ruleInvariantBlock17336); if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	          	newLeafNode(otherlv_3, grammarAccess.getInvariantBlockAccess().getSemicolonKeyword_2_1());
            	          
            	    }

            	    }
            	    break;

            	default :
            	    break loop85;
                }
            } while (true);

            otherlv_4=(Token)match(input,48,FOLLOW_48_in_ruleInvariantBlock17350); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_4, grammarAccess.getInvariantBlockAccess().getRightCurlyBracketKeyword_3());
                  
            }
            otherlv_5=(Token)match(input,29,FOLLOW_29_in_ruleInvariantBlock17362); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_5, grammarAccess.getInvariantBlockAccess().getSemicolonKeyword_4());
                  
            }

            }


            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleInvariantBlock"


    // $ANTLR start "entryRuleBlock"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7542:1: entryRuleBlock returns [EObject current=null] : iv_ruleBlock= ruleBlock EOF ;
    public final EObject entryRuleBlock() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleBlock = null;


        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7543:2: (iv_ruleBlock= ruleBlock EOF )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7544:2: iv_ruleBlock= ruleBlock EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getBlockRule()); 
            }
            pushFollow(FOLLOW_ruleBlock_in_entryRuleBlock17398);
            iv_ruleBlock=ruleBlock();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleBlock; 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRuleBlock17408); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleBlock"


    // $ANTLR start "ruleBlock"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7551:1: ruleBlock returns [EObject current=null] : ( () otherlv_1= '{' ( (lv_blockstatement_2_0= ruleBlockStatement ) )* otherlv_3= '}' ) ;
    public final EObject ruleBlock() throws RecognitionException {
        EObject current = null;

        Token otherlv_1=null;
        Token otherlv_3=null;
        EObject lv_blockstatement_2_0 = null;


         enterRule(); 
            
        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7554:28: ( ( () otherlv_1= '{' ( (lv_blockstatement_2_0= ruleBlockStatement ) )* otherlv_3= '}' ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7555:1: ( () otherlv_1= '{' ( (lv_blockstatement_2_0= ruleBlockStatement ) )* otherlv_3= '}' )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7555:1: ( () otherlv_1= '{' ( (lv_blockstatement_2_0= ruleBlockStatement ) )* otherlv_3= '}' )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7555:2: () otherlv_1= '{' ( (lv_blockstatement_2_0= ruleBlockStatement ) )* otherlv_3= '}'
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7555:2: ()
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7556:5: 
            {
            if ( state.backtracking==0 ) {

                      current = forceCreateModelElement(
                          grammarAccess.getBlockAccess().getBlockAction_0(),
                          current);
                  
            }

            }

            otherlv_1=(Token)match(input,47,FOLLOW_47_in_ruleBlock17454); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_1, grammarAccess.getBlockAccess().getLeftCurlyBracketKeyword_1());
                  
            }
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7565:1: ( (lv_blockstatement_2_0= ruleBlockStatement ) )*
            loop86:
            do {
                int alt86=2;
                int LA86_0 = input.LA(1);

                if ( (LA86_0==RULE_ID||(LA86_0>=RULE_FLOATING_POINT_LITERAL && LA86_0<=RULE_DECIMAL_LITERAL)||LA86_0==29||LA86_0==35||(LA86_0>=37 && LA86_0<=44)||LA86_0==47||LA86_0==52||LA86_0==55||LA86_0==57||(LA86_0>=89 && LA86_0<=90)||(LA86_0>=94 && LA86_0<=97)||(LA86_0>=102 && LA86_0<=106)||(LA86_0>=109 && LA86_0<=138)||(LA86_0>=140 && LA86_0<=143)||LA86_0==145) ) {
                    alt86=1;
                }


                switch (alt86) {
            	case 1 :
            	    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7566:1: (lv_blockstatement_2_0= ruleBlockStatement )
            	    {
            	    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7566:1: (lv_blockstatement_2_0= ruleBlockStatement )
            	    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7567:3: lv_blockstatement_2_0= ruleBlockStatement
            	    {
            	    if ( state.backtracking==0 ) {
            	       
            	      	        newCompositeNode(grammarAccess.getBlockAccess().getBlockstatementBlockStatementParserRuleCall_2_0()); 
            	      	    
            	    }
            	    pushFollow(FOLLOW_ruleBlockStatement_in_ruleBlock17475);
            	    lv_blockstatement_2_0=ruleBlockStatement();

            	    state._fsp--;
            	    if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      	        if (current==null) {
            	      	            current = createModelElementForParent(grammarAccess.getBlockRule());
            	      	        }
            	             		add(
            	             			current, 
            	             			"blockstatement",
            	              		lv_blockstatement_2_0, 
            	              		"BlockStatement");
            	      	        afterParserOrEnumRuleCall();
            	      	    
            	    }

            	    }


            	    }
            	    break;

            	default :
            	    break loop86;
                }
            } while (true);

            otherlv_3=(Token)match(input,48,FOLLOW_48_in_ruleBlock17488); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_3, grammarAccess.getBlockAccess().getRightCurlyBracketKeyword_3());
                  
            }

            }


            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleBlock"


    // $ANTLR start "entryRuleBlockStatement"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7595:1: entryRuleBlockStatement returns [EObject current=null] : iv_ruleBlockStatement= ruleBlockStatement EOF ;
    public final EObject entryRuleBlockStatement() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleBlockStatement = null;


        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7596:2: (iv_ruleBlockStatement= ruleBlockStatement EOF )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7597:2: iv_ruleBlockStatement= ruleBlockStatement EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getBlockStatementRule()); 
            }
            pushFollow(FOLLOW_ruleBlockStatement_in_entryRuleBlockStatement17524);
            iv_ruleBlockStatement=ruleBlockStatement();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleBlockStatement; 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRuleBlockStatement17534); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleBlockStatement"


    // $ANTLR start "ruleBlockStatement"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7604:1: ruleBlockStatement returns [EObject current=null] : (this_Statement_0= ruleStatement | this_LocalVarDecStatement_1= ruleLocalVarDecStatement ) ;
    public final EObject ruleBlockStatement() throws RecognitionException {
        EObject current = null;

        EObject this_Statement_0 = null;

        EObject this_LocalVarDecStatement_1 = null;


         enterRule(); 
            
        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7607:28: ( (this_Statement_0= ruleStatement | this_LocalVarDecStatement_1= ruleLocalVarDecStatement ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7608:1: (this_Statement_0= ruleStatement | this_LocalVarDecStatement_1= ruleLocalVarDecStatement )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7608:1: (this_Statement_0= ruleStatement | this_LocalVarDecStatement_1= ruleLocalVarDecStatement )
            int alt87=2;
            switch ( input.LA(1) ) {
            case RULE_FLOATING_POINT_LITERAL:
            case RULE_CHARACTER_LITERAL:
            case RULE_STRING_LITERAL:
            case RULE_HEX_LITERAL:
            case RULE_OCTAL_LITERAL:
            case RULE_DECIMAL_LITERAL:
            case 29:
            case 47:
            case 52:
            case 55:
            case 57:
            case 89:
            case 90:
            case 94:
            case 95:
            case 96:
            case 97:
            case 102:
            case 103:
            case 104:
            case 105:
            case 106:
            case 109:
            case 110:
            case 111:
            case 112:
            case 113:
            case 114:
            case 115:
            case 116:
            case 117:
            case 118:
            case 119:
            case 120:
            case 121:
            case 122:
            case 123:
            case 124:
            case 125:
            case 126:
            case 127:
            case 128:
            case 129:
            case 130:
            case 131:
            case 132:
            case 133:
            case 134:
            case 135:
            case 136:
            case 137:
            case 138:
            case 140:
            case 141:
            case 142:
            case 143:
            case 145:
                {
                alt87=1;
                }
                break;
            case RULE_ID:
                {
                int LA87_2 = input.LA(2);

                if ( (LA87_2==29||LA87_2==32||(LA87_2>=51 && LA87_2<=52)||LA87_2==57||(LA87_2>=67 && LA87_2<=93)||(LA87_2>=100 && LA87_2<=101)) ) {
                    alt87=1;
                }
                else if ( (LA87_2==RULE_ID||LA87_2==146) ) {
                    alt87=2;
                }
                else {
                    if (state.backtracking>0) {state.failed=true; return current;}
                    NoViableAltException nvae =
                        new NoViableAltException("", 87, 2, input);

                    throw nvae;
                }
                }
                break;
            case 35:
            case 37:
            case 38:
            case 39:
            case 40:
            case 41:
            case 42:
            case 43:
            case 44:
                {
                alt87=2;
                }
                break;
            default:
                if (state.backtracking>0) {state.failed=true; return current;}
                NoViableAltException nvae =
                    new NoViableAltException("", 87, 0, input);

                throw nvae;
            }

            switch (alt87) {
                case 1 :
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7609:5: this_Statement_0= ruleStatement
                    {
                    if ( state.backtracking==0 ) {
                       
                              newCompositeNode(grammarAccess.getBlockStatementAccess().getStatementParserRuleCall_0()); 
                          
                    }
                    pushFollow(FOLLOW_ruleStatement_in_ruleBlockStatement17581);
                    this_Statement_0=ruleStatement();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {
                       
                              current = this_Statement_0; 
                              afterParserOrEnumRuleCall();
                          
                    }

                    }
                    break;
                case 2 :
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7619:5: this_LocalVarDecStatement_1= ruleLocalVarDecStatement
                    {
                    if ( state.backtracking==0 ) {
                       
                              newCompositeNode(grammarAccess.getBlockStatementAccess().getLocalVarDecStatementParserRuleCall_1()); 
                          
                    }
                    pushFollow(FOLLOW_ruleLocalVarDecStatement_in_ruleBlockStatement17608);
                    this_LocalVarDecStatement_1=ruleLocalVarDecStatement();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {
                       
                              current = this_LocalVarDecStatement_1; 
                              afterParserOrEnumRuleCall();
                          
                    }

                    }
                    break;

            }


            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleBlockStatement"


    // $ANTLR start "entryRuleLocalVarDecStatement"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7635:1: entryRuleLocalVarDecStatement returns [EObject current=null] : iv_ruleLocalVarDecStatement= ruleLocalVarDecStatement EOF ;
    public final EObject entryRuleLocalVarDecStatement() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleLocalVarDecStatement = null;


        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7636:2: (iv_ruleLocalVarDecStatement= ruleLocalVarDecStatement EOF )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7637:2: iv_ruleLocalVarDecStatement= ruleLocalVarDecStatement EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getLocalVarDecStatementRule()); 
            }
            pushFollow(FOLLOW_ruleLocalVarDecStatement_in_entryRuleLocalVarDecStatement17643);
            iv_ruleLocalVarDecStatement=ruleLocalVarDecStatement();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleLocalVarDecStatement; 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRuleLocalVarDecStatement17653); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleLocalVarDecStatement"


    // $ANTLR start "ruleLocalVarDecStatement"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7644:1: ruleLocalVarDecStatement returns [EObject current=null] : (this_LocalVarDec_0= ruleLocalVarDec otherlv_1= ';' ) ;
    public final EObject ruleLocalVarDecStatement() throws RecognitionException {
        EObject current = null;

        Token otherlv_1=null;
        EObject this_LocalVarDec_0 = null;


         enterRule(); 
            
        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7647:28: ( (this_LocalVarDec_0= ruleLocalVarDec otherlv_1= ';' ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7648:1: (this_LocalVarDec_0= ruleLocalVarDec otherlv_1= ';' )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7648:1: (this_LocalVarDec_0= ruleLocalVarDec otherlv_1= ';' )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7649:5: this_LocalVarDec_0= ruleLocalVarDec otherlv_1= ';'
            {
            if ( state.backtracking==0 ) {
               
                      newCompositeNode(grammarAccess.getLocalVarDecStatementAccess().getLocalVarDecParserRuleCall_0()); 
                  
            }
            pushFollow(FOLLOW_ruleLocalVarDec_in_ruleLocalVarDecStatement17700);
            this_LocalVarDec_0=ruleLocalVarDec();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               
                      current = this_LocalVarDec_0; 
                      afterParserOrEnumRuleCall();
                  
            }
            otherlv_1=(Token)match(input,29,FOLLOW_29_in_ruleLocalVarDecStatement17711); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_1, grammarAccess.getLocalVarDecStatementAccess().getSemicolonKeyword_1());
                  
            }

            }


            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleLocalVarDecStatement"


    // $ANTLR start "entryRuleLocalVarDec"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7669:1: entryRuleLocalVarDec returns [EObject current=null] : iv_ruleLocalVarDec= ruleLocalVarDec EOF ;
    public final EObject entryRuleLocalVarDec() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleLocalVarDec = null;


        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7670:2: (iv_ruleLocalVarDec= ruleLocalVarDec EOF )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7671:2: iv_ruleLocalVarDec= ruleLocalVarDec EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getLocalVarDecRule()); 
            }
            pushFollow(FOLLOW_ruleLocalVarDec_in_entryRuleLocalVarDec17747);
            iv_ruleLocalVarDec=ruleLocalVarDec();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleLocalVarDec; 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRuleLocalVarDec17757); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleLocalVarDec"


    // $ANTLR start "ruleLocalVarDec"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7678:1: ruleLocalVarDec returns [EObject current=null] : ( ( (lv_variablemodifer_0_0= ruleVARIABLE_MODIFIER ) )? ( (lv_type_1_0= ruleUseType ) ) ( (lv_dim_2_0= ruleDim ) )* ( (lv_name_3_0= ruleLocalVarName ) ) (otherlv_4= '=' ( (lv_varini_5_0= ruleVariableInitializer ) ) )? ) ;
    public final EObject ruleLocalVarDec() throws RecognitionException {
        EObject current = null;

        Token otherlv_4=null;
        AntlrDatatypeRuleToken lv_variablemodifer_0_0 = null;

        EObject lv_type_1_0 = null;

        AntlrDatatypeRuleToken lv_dim_2_0 = null;

        AntlrDatatypeRuleToken lv_name_3_0 = null;

        EObject lv_varini_5_0 = null;


         enterRule(); 
            
        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7681:28: ( ( ( (lv_variablemodifer_0_0= ruleVARIABLE_MODIFIER ) )? ( (lv_type_1_0= ruleUseType ) ) ( (lv_dim_2_0= ruleDim ) )* ( (lv_name_3_0= ruleLocalVarName ) ) (otherlv_4= '=' ( (lv_varini_5_0= ruleVariableInitializer ) ) )? ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7682:1: ( ( (lv_variablemodifer_0_0= ruleVARIABLE_MODIFIER ) )? ( (lv_type_1_0= ruleUseType ) ) ( (lv_dim_2_0= ruleDim ) )* ( (lv_name_3_0= ruleLocalVarName ) ) (otherlv_4= '=' ( (lv_varini_5_0= ruleVariableInitializer ) ) )? )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7682:1: ( ( (lv_variablemodifer_0_0= ruleVARIABLE_MODIFIER ) )? ( (lv_type_1_0= ruleUseType ) ) ( (lv_dim_2_0= ruleDim ) )* ( (lv_name_3_0= ruleLocalVarName ) ) (otherlv_4= '=' ( (lv_varini_5_0= ruleVariableInitializer ) ) )? )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7682:2: ( (lv_variablemodifer_0_0= ruleVARIABLE_MODIFIER ) )? ( (lv_type_1_0= ruleUseType ) ) ( (lv_dim_2_0= ruleDim ) )* ( (lv_name_3_0= ruleLocalVarName ) ) (otherlv_4= '=' ( (lv_varini_5_0= ruleVariableInitializer ) ) )?
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7682:2: ( (lv_variablemodifer_0_0= ruleVARIABLE_MODIFIER ) )?
            int alt88=2;
            int LA88_0 = input.LA(1);

            if ( (LA88_0==35) ) {
                alt88=1;
            }
            switch (alt88) {
                case 1 :
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7683:1: (lv_variablemodifer_0_0= ruleVARIABLE_MODIFIER )
                    {
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7683:1: (lv_variablemodifer_0_0= ruleVARIABLE_MODIFIER )
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7684:3: lv_variablemodifer_0_0= ruleVARIABLE_MODIFIER
                    {
                    if ( state.backtracking==0 ) {
                       
                      	        newCompositeNode(grammarAccess.getLocalVarDecAccess().getVariablemodiferVARIABLE_MODIFIERParserRuleCall_0_0()); 
                      	    
                    }
                    pushFollow(FOLLOW_ruleVARIABLE_MODIFIER_in_ruleLocalVarDec17803);
                    lv_variablemodifer_0_0=ruleVARIABLE_MODIFIER();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      	        if (current==null) {
                      	            current = createModelElementForParent(grammarAccess.getLocalVarDecRule());
                      	        }
                             		set(
                             			current, 
                             			"variablemodifer",
                              		lv_variablemodifer_0_0, 
                              		"VARIABLE_MODIFIER");
                      	        afterParserOrEnumRuleCall();
                      	    
                    }

                    }


                    }
                    break;

            }

            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7700:3: ( (lv_type_1_0= ruleUseType ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7701:1: (lv_type_1_0= ruleUseType )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7701:1: (lv_type_1_0= ruleUseType )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7702:3: lv_type_1_0= ruleUseType
            {
            if ( state.backtracking==0 ) {
               
              	        newCompositeNode(grammarAccess.getLocalVarDecAccess().getTypeUseTypeParserRuleCall_1_0()); 
              	    
            }
            pushFollow(FOLLOW_ruleUseType_in_ruleLocalVarDec17825);
            lv_type_1_0=ruleUseType();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              	        if (current==null) {
              	            current = createModelElementForParent(grammarAccess.getLocalVarDecRule());
              	        }
                     		set(
                     			current, 
                     			"type",
                      		lv_type_1_0, 
                      		"UseType");
              	        afterParserOrEnumRuleCall();
              	    
            }

            }


            }

            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7718:2: ( (lv_dim_2_0= ruleDim ) )*
            loop89:
            do {
                int alt89=2;
                int LA89_0 = input.LA(1);

                if ( (LA89_0==146) ) {
                    alt89=1;
                }


                switch (alt89) {
            	case 1 :
            	    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7719:1: (lv_dim_2_0= ruleDim )
            	    {
            	    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7719:1: (lv_dim_2_0= ruleDim )
            	    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7720:3: lv_dim_2_0= ruleDim
            	    {
            	    if ( state.backtracking==0 ) {
            	       
            	      	        newCompositeNode(grammarAccess.getLocalVarDecAccess().getDimDimParserRuleCall_2_0()); 
            	      	    
            	    }
            	    pushFollow(FOLLOW_ruleDim_in_ruleLocalVarDec17846);
            	    lv_dim_2_0=ruleDim();

            	    state._fsp--;
            	    if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      	        if (current==null) {
            	      	            current = createModelElementForParent(grammarAccess.getLocalVarDecRule());
            	      	        }
            	             		add(
            	             			current, 
            	             			"dim",
            	              		lv_dim_2_0, 
            	              		"Dim");
            	      	        afterParserOrEnumRuleCall();
            	      	    
            	    }

            	    }


            	    }
            	    break;

            	default :
            	    break loop89;
                }
            } while (true);

            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7736:3: ( (lv_name_3_0= ruleLocalVarName ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7737:1: (lv_name_3_0= ruleLocalVarName )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7737:1: (lv_name_3_0= ruleLocalVarName )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7738:3: lv_name_3_0= ruleLocalVarName
            {
            if ( state.backtracking==0 ) {
               
              	        newCompositeNode(grammarAccess.getLocalVarDecAccess().getNameLocalVarNameParserRuleCall_3_0()); 
              	    
            }
            pushFollow(FOLLOW_ruleLocalVarName_in_ruleLocalVarDec17868);
            lv_name_3_0=ruleLocalVarName();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              	        if (current==null) {
              	            current = createModelElementForParent(grammarAccess.getLocalVarDecRule());
              	        }
                     		set(
                     			current, 
                     			"name",
                      		lv_name_3_0, 
                      		"LocalVarName");
              	        afterParserOrEnumRuleCall();
              	    
            }

            }


            }

            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7754:2: (otherlv_4= '=' ( (lv_varini_5_0= ruleVariableInitializer ) ) )?
            int alt90=2;
            int LA90_0 = input.LA(1);

            if ( (LA90_0==51) ) {
                alt90=1;
            }
            switch (alt90) {
                case 1 :
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7754:4: otherlv_4= '=' ( (lv_varini_5_0= ruleVariableInitializer ) )
                    {
                    otherlv_4=(Token)match(input,51,FOLLOW_51_in_ruleLocalVarDec17881); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                          	newLeafNode(otherlv_4, grammarAccess.getLocalVarDecAccess().getEqualsSignKeyword_4_0());
                          
                    }
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7758:1: ( (lv_varini_5_0= ruleVariableInitializer ) )
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7759:1: (lv_varini_5_0= ruleVariableInitializer )
                    {
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7759:1: (lv_varini_5_0= ruleVariableInitializer )
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7760:3: lv_varini_5_0= ruleVariableInitializer
                    {
                    if ( state.backtracking==0 ) {
                       
                      	        newCompositeNode(grammarAccess.getLocalVarDecAccess().getVariniVariableInitializerParserRuleCall_4_1_0()); 
                      	    
                    }
                    pushFollow(FOLLOW_ruleVariableInitializer_in_ruleLocalVarDec17902);
                    lv_varini_5_0=ruleVariableInitializer();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      	        if (current==null) {
                      	            current = createModelElementForParent(grammarAccess.getLocalVarDecRule());
                      	        }
                             		set(
                             			current, 
                             			"varini",
                              		lv_varini_5_0, 
                              		"VariableInitializer");
                      	        afterParserOrEnumRuleCall();
                      	    
                    }

                    }


                    }


                    }
                    break;

            }


            }


            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleLocalVarDec"


    // $ANTLR start "entryRuleStatement"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7784:1: entryRuleStatement returns [EObject current=null] : iv_ruleStatement= ruleStatement EOF ;
    public final EObject entryRuleStatement() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleStatement = null;


        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7785:2: (iv_ruleStatement= ruleStatement EOF )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7786:2: iv_ruleStatement= ruleStatement EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getStatementRule()); 
            }
            pushFollow(FOLLOW_ruleStatement_in_entryRuleStatement17940);
            iv_ruleStatement=ruleStatement();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleStatement; 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRuleStatement17950); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleStatement"


    // $ANTLR start "ruleStatement"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7793:1: ruleStatement returns [EObject current=null] : ( () ( ( (lv_block_1_0= ruleBlock ) ) | (otherlv_2= 'if' ( (lv_parexpression_3_0= ruleParExpression ) ) ( (lv_ifstatement_4_0= ruleStatement ) ) ( ( ( 'else' )=>otherlv_5= 'else' ) ( (lv_elsestatement_6_0= ruleStatement ) ) )? ) | (otherlv_7= 'for' otherlv_8= '(' ( (lv_forcontrol_9_0= ruleForControl ) ) otherlv_10= ')' ( (lv_forstatement_11_0= ruleStatement ) ) ) | (otherlv_12= 'break' ( (lv_identifier_13_0= RULE_ID ) )? otherlv_14= ';' ) | (otherlv_15= 'continue' ( (lv_identifier_16_0= RULE_ID ) )? otherlv_17= ';' ) | (otherlv_18= 'while' ( (lv_parexpression_19_0= ruleParExpression ) ) ( (lv_whilestatement_20_0= ruleStatement ) ) ) | ( (lv_return_21_0= ruleReturnStatement ) ) | ( ( (lv_statementexpression_22_0= ruleExpression ) ) otherlv_23= ';' ) | otherlv_24= ';' ) ) ;
    public final EObject ruleStatement() throws RecognitionException {
        EObject current = null;

        Token otherlv_2=null;
        Token otherlv_5=null;
        Token otherlv_7=null;
        Token otherlv_8=null;
        Token otherlv_10=null;
        Token otherlv_12=null;
        Token lv_identifier_13_0=null;
        Token otherlv_14=null;
        Token otherlv_15=null;
        Token lv_identifier_16_0=null;
        Token otherlv_17=null;
        Token otherlv_18=null;
        Token otherlv_23=null;
        Token otherlv_24=null;
        EObject lv_block_1_0 = null;

        EObject lv_parexpression_3_0 = null;

        EObject lv_ifstatement_4_0 = null;

        EObject lv_elsestatement_6_0 = null;

        EObject lv_forcontrol_9_0 = null;

        EObject lv_forstatement_11_0 = null;

        EObject lv_parexpression_19_0 = null;

        EObject lv_whilestatement_20_0 = null;

        EObject lv_return_21_0 = null;

        EObject lv_statementexpression_22_0 = null;


         enterRule(); 
            
        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7796:28: ( ( () ( ( (lv_block_1_0= ruleBlock ) ) | (otherlv_2= 'if' ( (lv_parexpression_3_0= ruleParExpression ) ) ( (lv_ifstatement_4_0= ruleStatement ) ) ( ( ( 'else' )=>otherlv_5= 'else' ) ( (lv_elsestatement_6_0= ruleStatement ) ) )? ) | (otherlv_7= 'for' otherlv_8= '(' ( (lv_forcontrol_9_0= ruleForControl ) ) otherlv_10= ')' ( (lv_forstatement_11_0= ruleStatement ) ) ) | (otherlv_12= 'break' ( (lv_identifier_13_0= RULE_ID ) )? otherlv_14= ';' ) | (otherlv_15= 'continue' ( (lv_identifier_16_0= RULE_ID ) )? otherlv_17= ';' ) | (otherlv_18= 'while' ( (lv_parexpression_19_0= ruleParExpression ) ) ( (lv_whilestatement_20_0= ruleStatement ) ) ) | ( (lv_return_21_0= ruleReturnStatement ) ) | ( ( (lv_statementexpression_22_0= ruleExpression ) ) otherlv_23= ';' ) | otherlv_24= ';' ) ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7797:1: ( () ( ( (lv_block_1_0= ruleBlock ) ) | (otherlv_2= 'if' ( (lv_parexpression_3_0= ruleParExpression ) ) ( (lv_ifstatement_4_0= ruleStatement ) ) ( ( ( 'else' )=>otherlv_5= 'else' ) ( (lv_elsestatement_6_0= ruleStatement ) ) )? ) | (otherlv_7= 'for' otherlv_8= '(' ( (lv_forcontrol_9_0= ruleForControl ) ) otherlv_10= ')' ( (lv_forstatement_11_0= ruleStatement ) ) ) | (otherlv_12= 'break' ( (lv_identifier_13_0= RULE_ID ) )? otherlv_14= ';' ) | (otherlv_15= 'continue' ( (lv_identifier_16_0= RULE_ID ) )? otherlv_17= ';' ) | (otherlv_18= 'while' ( (lv_parexpression_19_0= ruleParExpression ) ) ( (lv_whilestatement_20_0= ruleStatement ) ) ) | ( (lv_return_21_0= ruleReturnStatement ) ) | ( ( (lv_statementexpression_22_0= ruleExpression ) ) otherlv_23= ';' ) | otherlv_24= ';' ) )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7797:1: ( () ( ( (lv_block_1_0= ruleBlock ) ) | (otherlv_2= 'if' ( (lv_parexpression_3_0= ruleParExpression ) ) ( (lv_ifstatement_4_0= ruleStatement ) ) ( ( ( 'else' )=>otherlv_5= 'else' ) ( (lv_elsestatement_6_0= ruleStatement ) ) )? ) | (otherlv_7= 'for' otherlv_8= '(' ( (lv_forcontrol_9_0= ruleForControl ) ) otherlv_10= ')' ( (lv_forstatement_11_0= ruleStatement ) ) ) | (otherlv_12= 'break' ( (lv_identifier_13_0= RULE_ID ) )? otherlv_14= ';' ) | (otherlv_15= 'continue' ( (lv_identifier_16_0= RULE_ID ) )? otherlv_17= ';' ) | (otherlv_18= 'while' ( (lv_parexpression_19_0= ruleParExpression ) ) ( (lv_whilestatement_20_0= ruleStatement ) ) ) | ( (lv_return_21_0= ruleReturnStatement ) ) | ( ( (lv_statementexpression_22_0= ruleExpression ) ) otherlv_23= ';' ) | otherlv_24= ';' ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7797:2: () ( ( (lv_block_1_0= ruleBlock ) ) | (otherlv_2= 'if' ( (lv_parexpression_3_0= ruleParExpression ) ) ( (lv_ifstatement_4_0= ruleStatement ) ) ( ( ( 'else' )=>otherlv_5= 'else' ) ( (lv_elsestatement_6_0= ruleStatement ) ) )? ) | (otherlv_7= 'for' otherlv_8= '(' ( (lv_forcontrol_9_0= ruleForControl ) ) otherlv_10= ')' ( (lv_forstatement_11_0= ruleStatement ) ) ) | (otherlv_12= 'break' ( (lv_identifier_13_0= RULE_ID ) )? otherlv_14= ';' ) | (otherlv_15= 'continue' ( (lv_identifier_16_0= RULE_ID ) )? otherlv_17= ';' ) | (otherlv_18= 'while' ( (lv_parexpression_19_0= ruleParExpression ) ) ( (lv_whilestatement_20_0= ruleStatement ) ) ) | ( (lv_return_21_0= ruleReturnStatement ) ) | ( ( (lv_statementexpression_22_0= ruleExpression ) ) otherlv_23= ';' ) | otherlv_24= ';' )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7797:2: ()
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7798:5: 
            {
            if ( state.backtracking==0 ) {

                      current = forceCreateModelElement(
                          grammarAccess.getStatementAccess().getStatementAction_0(),
                          current);
                  
            }

            }

            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7803:2: ( ( (lv_block_1_0= ruleBlock ) ) | (otherlv_2= 'if' ( (lv_parexpression_3_0= ruleParExpression ) ) ( (lv_ifstatement_4_0= ruleStatement ) ) ( ( ( 'else' )=>otherlv_5= 'else' ) ( (lv_elsestatement_6_0= ruleStatement ) ) )? ) | (otherlv_7= 'for' otherlv_8= '(' ( (lv_forcontrol_9_0= ruleForControl ) ) otherlv_10= ')' ( (lv_forstatement_11_0= ruleStatement ) ) ) | (otherlv_12= 'break' ( (lv_identifier_13_0= RULE_ID ) )? otherlv_14= ';' ) | (otherlv_15= 'continue' ( (lv_identifier_16_0= RULE_ID ) )? otherlv_17= ';' ) | (otherlv_18= 'while' ( (lv_parexpression_19_0= ruleParExpression ) ) ( (lv_whilestatement_20_0= ruleStatement ) ) ) | ( (lv_return_21_0= ruleReturnStatement ) ) | ( ( (lv_statementexpression_22_0= ruleExpression ) ) otherlv_23= ';' ) | otherlv_24= ';' )
            int alt94=9;
            alt94 = dfa94.predict(input);
            switch (alt94) {
                case 1 :
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7803:3: ( (lv_block_1_0= ruleBlock ) )
                    {
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7803:3: ( (lv_block_1_0= ruleBlock ) )
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7804:1: (lv_block_1_0= ruleBlock )
                    {
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7804:1: (lv_block_1_0= ruleBlock )
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7805:3: lv_block_1_0= ruleBlock
                    {
                    if ( state.backtracking==0 ) {
                       
                      	        newCompositeNode(grammarAccess.getStatementAccess().getBlockBlockParserRuleCall_1_0_0()); 
                      	    
                    }
                    pushFollow(FOLLOW_ruleBlock_in_ruleStatement18006);
                    lv_block_1_0=ruleBlock();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      	        if (current==null) {
                      	            current = createModelElementForParent(grammarAccess.getStatementRule());
                      	        }
                             		set(
                             			current, 
                             			"block",
                              		lv_block_1_0, 
                              		"Block");
                      	        afterParserOrEnumRuleCall();
                      	    
                    }

                    }


                    }


                    }
                    break;
                case 2 :
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7822:6: (otherlv_2= 'if' ( (lv_parexpression_3_0= ruleParExpression ) ) ( (lv_ifstatement_4_0= ruleStatement ) ) ( ( ( 'else' )=>otherlv_5= 'else' ) ( (lv_elsestatement_6_0= ruleStatement ) ) )? )
                    {
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7822:6: (otherlv_2= 'if' ( (lv_parexpression_3_0= ruleParExpression ) ) ( (lv_ifstatement_4_0= ruleStatement ) ) ( ( ( 'else' )=>otherlv_5= 'else' ) ( (lv_elsestatement_6_0= ruleStatement ) ) )? )
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7822:8: otherlv_2= 'if' ( (lv_parexpression_3_0= ruleParExpression ) ) ( (lv_ifstatement_4_0= ruleStatement ) ) ( ( ( 'else' )=>otherlv_5= 'else' ) ( (lv_elsestatement_6_0= ruleStatement ) ) )?
                    {
                    otherlv_2=(Token)match(input,138,FOLLOW_138_in_ruleStatement18025); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                          	newLeafNode(otherlv_2, grammarAccess.getStatementAccess().getIfKeyword_1_1_0());
                          
                    }
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7826:1: ( (lv_parexpression_3_0= ruleParExpression ) )
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7827:1: (lv_parexpression_3_0= ruleParExpression )
                    {
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7827:1: (lv_parexpression_3_0= ruleParExpression )
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7828:3: lv_parexpression_3_0= ruleParExpression
                    {
                    if ( state.backtracking==0 ) {
                       
                      	        newCompositeNode(grammarAccess.getStatementAccess().getParexpressionParExpressionParserRuleCall_1_1_1_0()); 
                      	    
                    }
                    pushFollow(FOLLOW_ruleParExpression_in_ruleStatement18046);
                    lv_parexpression_3_0=ruleParExpression();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      	        if (current==null) {
                      	            current = createModelElementForParent(grammarAccess.getStatementRule());
                      	        }
                             		set(
                             			current, 
                             			"parexpression",
                              		lv_parexpression_3_0, 
                              		"ParExpression");
                      	        afterParserOrEnumRuleCall();
                      	    
                    }

                    }


                    }

                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7844:2: ( (lv_ifstatement_4_0= ruleStatement ) )
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7845:1: (lv_ifstatement_4_0= ruleStatement )
                    {
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7845:1: (lv_ifstatement_4_0= ruleStatement )
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7846:3: lv_ifstatement_4_0= ruleStatement
                    {
                    if ( state.backtracking==0 ) {
                       
                      	        newCompositeNode(grammarAccess.getStatementAccess().getIfstatementStatementParserRuleCall_1_1_2_0()); 
                      	    
                    }
                    pushFollow(FOLLOW_ruleStatement_in_ruleStatement18067);
                    lv_ifstatement_4_0=ruleStatement();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      	        if (current==null) {
                      	            current = createModelElementForParent(grammarAccess.getStatementRule());
                      	        }
                             		set(
                             			current, 
                             			"ifstatement",
                              		lv_ifstatement_4_0, 
                              		"Statement");
                      	        afterParserOrEnumRuleCall();
                      	    
                    }

                    }


                    }

                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7862:2: ( ( ( 'else' )=>otherlv_5= 'else' ) ( (lv_elsestatement_6_0= ruleStatement ) ) )?
                    int alt91=2;
                    int LA91_0 = input.LA(1);

                    if ( (LA91_0==139) ) {
                        int LA91_1 = input.LA(2);

                        if ( (synpred5_InternalApricot()) ) {
                            alt91=1;
                        }
                    }
                    switch (alt91) {
                        case 1 :
                            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7862:3: ( ( 'else' )=>otherlv_5= 'else' ) ( (lv_elsestatement_6_0= ruleStatement ) )
                            {
                            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7862:3: ( ( 'else' )=>otherlv_5= 'else' )
                            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7862:4: ( 'else' )=>otherlv_5= 'else'
                            {
                            otherlv_5=(Token)match(input,139,FOLLOW_139_in_ruleStatement18088); if (state.failed) return current;
                            if ( state.backtracking==0 ) {

                                  	newLeafNode(otherlv_5, grammarAccess.getStatementAccess().getElseKeyword_1_1_3_0());
                                  
                            }

                            }

                            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7867:2: ( (lv_elsestatement_6_0= ruleStatement ) )
                            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7868:1: (lv_elsestatement_6_0= ruleStatement )
                            {
                            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7868:1: (lv_elsestatement_6_0= ruleStatement )
                            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7869:3: lv_elsestatement_6_0= ruleStatement
                            {
                            if ( state.backtracking==0 ) {
                               
                              	        newCompositeNode(grammarAccess.getStatementAccess().getElsestatementStatementParserRuleCall_1_1_3_1_0()); 
                              	    
                            }
                            pushFollow(FOLLOW_ruleStatement_in_ruleStatement18110);
                            lv_elsestatement_6_0=ruleStatement();

                            state._fsp--;
                            if (state.failed) return current;
                            if ( state.backtracking==0 ) {

                              	        if (current==null) {
                              	            current = createModelElementForParent(grammarAccess.getStatementRule());
                              	        }
                                     		set(
                                     			current, 
                                     			"elsestatement",
                                      		lv_elsestatement_6_0, 
                                      		"Statement");
                              	        afterParserOrEnumRuleCall();
                              	    
                            }

                            }


                            }


                            }
                            break;

                    }


                    }


                    }
                    break;
                case 3 :
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7886:6: (otherlv_7= 'for' otherlv_8= '(' ( (lv_forcontrol_9_0= ruleForControl ) ) otherlv_10= ')' ( (lv_forstatement_11_0= ruleStatement ) ) )
                    {
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7886:6: (otherlv_7= 'for' otherlv_8= '(' ( (lv_forcontrol_9_0= ruleForControl ) ) otherlv_10= ')' ( (lv_forstatement_11_0= ruleStatement ) ) )
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7886:8: otherlv_7= 'for' otherlv_8= '(' ( (lv_forcontrol_9_0= ruleForControl ) ) otherlv_10= ')' ( (lv_forstatement_11_0= ruleStatement ) )
                    {
                    otherlv_7=(Token)match(input,140,FOLLOW_140_in_ruleStatement18132); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                          	newLeafNode(otherlv_7, grammarAccess.getStatementAccess().getForKeyword_1_2_0());
                          
                    }
                    otherlv_8=(Token)match(input,52,FOLLOW_52_in_ruleStatement18144); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                          	newLeafNode(otherlv_8, grammarAccess.getStatementAccess().getLeftParenthesisKeyword_1_2_1());
                          
                    }
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7894:1: ( (lv_forcontrol_9_0= ruleForControl ) )
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7895:1: (lv_forcontrol_9_0= ruleForControl )
                    {
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7895:1: (lv_forcontrol_9_0= ruleForControl )
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7896:3: lv_forcontrol_9_0= ruleForControl
                    {
                    if ( state.backtracking==0 ) {
                       
                      	        newCompositeNode(grammarAccess.getStatementAccess().getForcontrolForControlParserRuleCall_1_2_2_0()); 
                      	    
                    }
                    pushFollow(FOLLOW_ruleForControl_in_ruleStatement18165);
                    lv_forcontrol_9_0=ruleForControl();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      	        if (current==null) {
                      	            current = createModelElementForParent(grammarAccess.getStatementRule());
                      	        }
                             		set(
                             			current, 
                             			"forcontrol",
                              		lv_forcontrol_9_0, 
                              		"ForControl");
                      	        afterParserOrEnumRuleCall();
                      	    
                    }

                    }


                    }

                    otherlv_10=(Token)match(input,54,FOLLOW_54_in_ruleStatement18177); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                          	newLeafNode(otherlv_10, grammarAccess.getStatementAccess().getRightParenthesisKeyword_1_2_3());
                          
                    }
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7916:1: ( (lv_forstatement_11_0= ruleStatement ) )
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7917:1: (lv_forstatement_11_0= ruleStatement )
                    {
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7917:1: (lv_forstatement_11_0= ruleStatement )
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7918:3: lv_forstatement_11_0= ruleStatement
                    {
                    if ( state.backtracking==0 ) {
                       
                      	        newCompositeNode(grammarAccess.getStatementAccess().getForstatementStatementParserRuleCall_1_2_4_0()); 
                      	    
                    }
                    pushFollow(FOLLOW_ruleStatement_in_ruleStatement18198);
                    lv_forstatement_11_0=ruleStatement();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      	        if (current==null) {
                      	            current = createModelElementForParent(grammarAccess.getStatementRule());
                      	        }
                             		set(
                             			current, 
                             			"forstatement",
                              		lv_forstatement_11_0, 
                              		"Statement");
                      	        afterParserOrEnumRuleCall();
                      	    
                    }

                    }


                    }


                    }


                    }
                    break;
                case 4 :
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7935:6: (otherlv_12= 'break' ( (lv_identifier_13_0= RULE_ID ) )? otherlv_14= ';' )
                    {
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7935:6: (otherlv_12= 'break' ( (lv_identifier_13_0= RULE_ID ) )? otherlv_14= ';' )
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7935:8: otherlv_12= 'break' ( (lv_identifier_13_0= RULE_ID ) )? otherlv_14= ';'
                    {
                    otherlv_12=(Token)match(input,141,FOLLOW_141_in_ruleStatement18218); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                          	newLeafNode(otherlv_12, grammarAccess.getStatementAccess().getBreakKeyword_1_3_0());
                          
                    }
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7939:1: ( (lv_identifier_13_0= RULE_ID ) )?
                    int alt92=2;
                    int LA92_0 = input.LA(1);

                    if ( (LA92_0==RULE_ID) ) {
                        alt92=1;
                    }
                    switch (alt92) {
                        case 1 :
                            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7940:1: (lv_identifier_13_0= RULE_ID )
                            {
                            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7940:1: (lv_identifier_13_0= RULE_ID )
                            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7941:3: lv_identifier_13_0= RULE_ID
                            {
                            lv_identifier_13_0=(Token)match(input,RULE_ID,FOLLOW_RULE_ID_in_ruleStatement18235); if (state.failed) return current;
                            if ( state.backtracking==0 ) {

                              			newLeafNode(lv_identifier_13_0, grammarAccess.getStatementAccess().getIdentifierIDTerminalRuleCall_1_3_1_0()); 
                              		
                            }
                            if ( state.backtracking==0 ) {

                              	        if (current==null) {
                              	            current = createModelElement(grammarAccess.getStatementRule());
                              	        }
                                     		setWithLastConsumed(
                                     			current, 
                                     			"identifier",
                                      		lv_identifier_13_0, 
                                      		"ID");
                              	    
                            }

                            }


                            }
                            break;

                    }

                    otherlv_14=(Token)match(input,29,FOLLOW_29_in_ruleStatement18253); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                          	newLeafNode(otherlv_14, grammarAccess.getStatementAccess().getSemicolonKeyword_1_3_2());
                          
                    }

                    }


                    }
                    break;
                case 5 :
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7962:6: (otherlv_15= 'continue' ( (lv_identifier_16_0= RULE_ID ) )? otherlv_17= ';' )
                    {
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7962:6: (otherlv_15= 'continue' ( (lv_identifier_16_0= RULE_ID ) )? otherlv_17= ';' )
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7962:8: otherlv_15= 'continue' ( (lv_identifier_16_0= RULE_ID ) )? otherlv_17= ';'
                    {
                    otherlv_15=(Token)match(input,142,FOLLOW_142_in_ruleStatement18273); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                          	newLeafNode(otherlv_15, grammarAccess.getStatementAccess().getContinueKeyword_1_4_0());
                          
                    }
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7966:1: ( (lv_identifier_16_0= RULE_ID ) )?
                    int alt93=2;
                    int LA93_0 = input.LA(1);

                    if ( (LA93_0==RULE_ID) ) {
                        alt93=1;
                    }
                    switch (alt93) {
                        case 1 :
                            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7967:1: (lv_identifier_16_0= RULE_ID )
                            {
                            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7967:1: (lv_identifier_16_0= RULE_ID )
                            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7968:3: lv_identifier_16_0= RULE_ID
                            {
                            lv_identifier_16_0=(Token)match(input,RULE_ID,FOLLOW_RULE_ID_in_ruleStatement18290); if (state.failed) return current;
                            if ( state.backtracking==0 ) {

                              			newLeafNode(lv_identifier_16_0, grammarAccess.getStatementAccess().getIdentifierIDTerminalRuleCall_1_4_1_0()); 
                              		
                            }
                            if ( state.backtracking==0 ) {

                              	        if (current==null) {
                              	            current = createModelElement(grammarAccess.getStatementRule());
                              	        }
                                     		setWithLastConsumed(
                                     			current, 
                                     			"identifier",
                                      		lv_identifier_16_0, 
                                      		"ID");
                              	    
                            }

                            }


                            }
                            break;

                    }

                    otherlv_17=(Token)match(input,29,FOLLOW_29_in_ruleStatement18308); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                          	newLeafNode(otherlv_17, grammarAccess.getStatementAccess().getSemicolonKeyword_1_4_2());
                          
                    }

                    }


                    }
                    break;
                case 6 :
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7989:6: (otherlv_18= 'while' ( (lv_parexpression_19_0= ruleParExpression ) ) ( (lv_whilestatement_20_0= ruleStatement ) ) )
                    {
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7989:6: (otherlv_18= 'while' ( (lv_parexpression_19_0= ruleParExpression ) ) ( (lv_whilestatement_20_0= ruleStatement ) ) )
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7989:8: otherlv_18= 'while' ( (lv_parexpression_19_0= ruleParExpression ) ) ( (lv_whilestatement_20_0= ruleStatement ) )
                    {
                    otherlv_18=(Token)match(input,143,FOLLOW_143_in_ruleStatement18328); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                          	newLeafNode(otherlv_18, grammarAccess.getStatementAccess().getWhileKeyword_1_5_0());
                          
                    }
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7993:1: ( (lv_parexpression_19_0= ruleParExpression ) )
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7994:1: (lv_parexpression_19_0= ruleParExpression )
                    {
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7994:1: (lv_parexpression_19_0= ruleParExpression )
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7995:3: lv_parexpression_19_0= ruleParExpression
                    {
                    if ( state.backtracking==0 ) {
                       
                      	        newCompositeNode(grammarAccess.getStatementAccess().getParexpressionParExpressionParserRuleCall_1_5_1_0()); 
                      	    
                    }
                    pushFollow(FOLLOW_ruleParExpression_in_ruleStatement18349);
                    lv_parexpression_19_0=ruleParExpression();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      	        if (current==null) {
                      	            current = createModelElementForParent(grammarAccess.getStatementRule());
                      	        }
                             		set(
                             			current, 
                             			"parexpression",
                              		lv_parexpression_19_0, 
                              		"ParExpression");
                      	        afterParserOrEnumRuleCall();
                      	    
                    }

                    }


                    }

                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8011:2: ( (lv_whilestatement_20_0= ruleStatement ) )
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8012:1: (lv_whilestatement_20_0= ruleStatement )
                    {
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8012:1: (lv_whilestatement_20_0= ruleStatement )
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8013:3: lv_whilestatement_20_0= ruleStatement
                    {
                    if ( state.backtracking==0 ) {
                       
                      	        newCompositeNode(grammarAccess.getStatementAccess().getWhilestatementStatementParserRuleCall_1_5_2_0()); 
                      	    
                    }
                    pushFollow(FOLLOW_ruleStatement_in_ruleStatement18370);
                    lv_whilestatement_20_0=ruleStatement();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      	        if (current==null) {
                      	            current = createModelElementForParent(grammarAccess.getStatementRule());
                      	        }
                             		set(
                             			current, 
                             			"whilestatement",
                              		lv_whilestatement_20_0, 
                              		"Statement");
                      	        afterParserOrEnumRuleCall();
                      	    
                    }

                    }


                    }


                    }


                    }
                    break;
                case 7 :
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8030:6: ( (lv_return_21_0= ruleReturnStatement ) )
                    {
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8030:6: ( (lv_return_21_0= ruleReturnStatement ) )
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8031:1: (lv_return_21_0= ruleReturnStatement )
                    {
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8031:1: (lv_return_21_0= ruleReturnStatement )
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8032:3: lv_return_21_0= ruleReturnStatement
                    {
                    if ( state.backtracking==0 ) {
                       
                      	        newCompositeNode(grammarAccess.getStatementAccess().getReturnReturnStatementParserRuleCall_1_6_0()); 
                      	    
                    }
                    pushFollow(FOLLOW_ruleReturnStatement_in_ruleStatement18398);
                    lv_return_21_0=ruleReturnStatement();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      	        if (current==null) {
                      	            current = createModelElementForParent(grammarAccess.getStatementRule());
                      	        }
                             		set(
                             			current, 
                             			"return",
                              		lv_return_21_0, 
                              		"ReturnStatement");
                      	        afterParserOrEnumRuleCall();
                      	    
                    }

                    }


                    }


                    }
                    break;
                case 8 :
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8049:6: ( ( (lv_statementexpression_22_0= ruleExpression ) ) otherlv_23= ';' )
                    {
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8049:6: ( ( (lv_statementexpression_22_0= ruleExpression ) ) otherlv_23= ';' )
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8049:7: ( (lv_statementexpression_22_0= ruleExpression ) ) otherlv_23= ';'
                    {
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8049:7: ( (lv_statementexpression_22_0= ruleExpression ) )
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8050:1: (lv_statementexpression_22_0= ruleExpression )
                    {
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8050:1: (lv_statementexpression_22_0= ruleExpression )
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8051:3: lv_statementexpression_22_0= ruleExpression
                    {
                    if ( state.backtracking==0 ) {
                       
                      	        newCompositeNode(grammarAccess.getStatementAccess().getStatementexpressionExpressionParserRuleCall_1_7_0_0()); 
                      	    
                    }
                    pushFollow(FOLLOW_ruleExpression_in_ruleStatement18426);
                    lv_statementexpression_22_0=ruleExpression();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      	        if (current==null) {
                      	            current = createModelElementForParent(grammarAccess.getStatementRule());
                      	        }
                             		set(
                             			current, 
                             			"statementexpression",
                              		lv_statementexpression_22_0, 
                              		"Expression");
                      	        afterParserOrEnumRuleCall();
                      	    
                    }

                    }


                    }

                    otherlv_23=(Token)match(input,29,FOLLOW_29_in_ruleStatement18438); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                          	newLeafNode(otherlv_23, grammarAccess.getStatementAccess().getSemicolonKeyword_1_7_1());
                          
                    }

                    }


                    }
                    break;
                case 9 :
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8072:7: otherlv_24= ';'
                    {
                    otherlv_24=(Token)match(input,29,FOLLOW_29_in_ruleStatement18457); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                          	newLeafNode(otherlv_24, grammarAccess.getStatementAccess().getSemicolonKeyword_1_8());
                          
                    }

                    }
                    break;

            }


            }


            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleStatement"


    // $ANTLR start "entryRuleForControl"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8084:1: entryRuleForControl returns [EObject current=null] : iv_ruleForControl= ruleForControl EOF ;
    public final EObject entryRuleForControl() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleForControl = null;


        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8085:2: (iv_ruleForControl= ruleForControl EOF )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8086:2: iv_ruleForControl= ruleForControl EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getForControlRule()); 
            }
            pushFollow(FOLLOW_ruleForControl_in_entryRuleForControl18494);
            iv_ruleForControl=ruleForControl();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleForControl; 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRuleForControl18504); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleForControl"


    // $ANTLR start "ruleForControl"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8093:1: ruleForControl returns [EObject current=null] : ( () ( ( (lv_enhancedforcontrol_1_0= ruleEnhancedForControl ) ) | ( ( (lv_forinit_2_0= ruleForInit ) )? otherlv_3= ';' ( (lv_expression_4_0= ruleExpression ) )? otherlv_5= ';' ( (lv_forupdate_6_0= ruleForUpdate ) )? ) ) ) ;
    public final EObject ruleForControl() throws RecognitionException {
        EObject current = null;

        Token otherlv_3=null;
        Token otherlv_5=null;
        EObject lv_enhancedforcontrol_1_0 = null;

        EObject lv_forinit_2_0 = null;

        EObject lv_expression_4_0 = null;

        EObject lv_forupdate_6_0 = null;


         enterRule(); 
            
        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8096:28: ( ( () ( ( (lv_enhancedforcontrol_1_0= ruleEnhancedForControl ) ) | ( ( (lv_forinit_2_0= ruleForInit ) )? otherlv_3= ';' ( (lv_expression_4_0= ruleExpression ) )? otherlv_5= ';' ( (lv_forupdate_6_0= ruleForUpdate ) )? ) ) ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8097:1: ( () ( ( (lv_enhancedforcontrol_1_0= ruleEnhancedForControl ) ) | ( ( (lv_forinit_2_0= ruleForInit ) )? otherlv_3= ';' ( (lv_expression_4_0= ruleExpression ) )? otherlv_5= ';' ( (lv_forupdate_6_0= ruleForUpdate ) )? ) ) )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8097:1: ( () ( ( (lv_enhancedforcontrol_1_0= ruleEnhancedForControl ) ) | ( ( (lv_forinit_2_0= ruleForInit ) )? otherlv_3= ';' ( (lv_expression_4_0= ruleExpression ) )? otherlv_5= ';' ( (lv_forupdate_6_0= ruleForUpdate ) )? ) ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8097:2: () ( ( (lv_enhancedforcontrol_1_0= ruleEnhancedForControl ) ) | ( ( (lv_forinit_2_0= ruleForInit ) )? otherlv_3= ';' ( (lv_expression_4_0= ruleExpression ) )? otherlv_5= ';' ( (lv_forupdate_6_0= ruleForUpdate ) )? ) )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8097:2: ()
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8098:5: 
            {
            if ( state.backtracking==0 ) {

                      current = forceCreateModelElement(
                          grammarAccess.getForControlAccess().getForControlAction_0(),
                          current);
                  
            }

            }

            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8103:2: ( ( (lv_enhancedforcontrol_1_0= ruleEnhancedForControl ) ) | ( ( (lv_forinit_2_0= ruleForInit ) )? otherlv_3= ';' ( (lv_expression_4_0= ruleExpression ) )? otherlv_5= ';' ( (lv_forupdate_6_0= ruleForUpdate ) )? ) )
            int alt98=2;
            switch ( input.LA(1) ) {
            case RULE_ID:
                {
                int LA98_1 = input.LA(2);

                if ( (LA98_1==RULE_ID) ) {
                    alt98=1;
                }
                else if ( (LA98_1==29||LA98_1==32||(LA98_1>=51 && LA98_1<=53)||LA98_1==57||(LA98_1>=67 && LA98_1<=93)||(LA98_1>=100 && LA98_1<=101)) ) {
                    alt98=2;
                }
                else {
                    if (state.backtracking>0) {state.failed=true; return current;}
                    NoViableAltException nvae =
                        new NoViableAltException("", 98, 1, input);

                    throw nvae;
                }
                }
                break;
            case 37:
            case 38:
            case 39:
            case 40:
            case 41:
            case 42:
            case 43:
            case 44:
                {
                alt98=1;
                }
                break;
            case RULE_FLOATING_POINT_LITERAL:
            case RULE_CHARACTER_LITERAL:
            case RULE_STRING_LITERAL:
            case RULE_HEX_LITERAL:
            case RULE_OCTAL_LITERAL:
            case RULE_DECIMAL_LITERAL:
            case 29:
            case 52:
            case 57:
            case 89:
            case 90:
            case 94:
            case 95:
            case 96:
            case 97:
            case 102:
            case 103:
            case 104:
            case 105:
            case 106:
            case 109:
            case 110:
            case 111:
            case 112:
            case 113:
            case 114:
            case 115:
            case 116:
            case 117:
            case 118:
            case 119:
            case 120:
            case 121:
            case 122:
            case 123:
            case 124:
            case 125:
            case 126:
            case 127:
            case 128:
            case 129:
            case 130:
            case 131:
            case 132:
            case 133:
            case 134:
            case 135:
            case 136:
            case 137:
            case 145:
                {
                alt98=2;
                }
                break;
            default:
                if (state.backtracking>0) {state.failed=true; return current;}
                NoViableAltException nvae =
                    new NoViableAltException("", 98, 0, input);

                throw nvae;
            }

            switch (alt98) {
                case 1 :
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8103:3: ( (lv_enhancedforcontrol_1_0= ruleEnhancedForControl ) )
                    {
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8103:3: ( (lv_enhancedforcontrol_1_0= ruleEnhancedForControl ) )
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8104:1: (lv_enhancedforcontrol_1_0= ruleEnhancedForControl )
                    {
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8104:1: (lv_enhancedforcontrol_1_0= ruleEnhancedForControl )
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8105:3: lv_enhancedforcontrol_1_0= ruleEnhancedForControl
                    {
                    if ( state.backtracking==0 ) {
                       
                      	        newCompositeNode(grammarAccess.getForControlAccess().getEnhancedforcontrolEnhancedForControlParserRuleCall_1_0_0()); 
                      	    
                    }
                    pushFollow(FOLLOW_ruleEnhancedForControl_in_ruleForControl18560);
                    lv_enhancedforcontrol_1_0=ruleEnhancedForControl();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      	        if (current==null) {
                      	            current = createModelElementForParent(grammarAccess.getForControlRule());
                      	        }
                             		set(
                             			current, 
                             			"enhancedforcontrol",
                              		lv_enhancedforcontrol_1_0, 
                              		"EnhancedForControl");
                      	        afterParserOrEnumRuleCall();
                      	    
                    }

                    }


                    }


                    }
                    break;
                case 2 :
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8122:6: ( ( (lv_forinit_2_0= ruleForInit ) )? otherlv_3= ';' ( (lv_expression_4_0= ruleExpression ) )? otherlv_5= ';' ( (lv_forupdate_6_0= ruleForUpdate ) )? )
                    {
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8122:6: ( ( (lv_forinit_2_0= ruleForInit ) )? otherlv_3= ';' ( (lv_expression_4_0= ruleExpression ) )? otherlv_5= ';' ( (lv_forupdate_6_0= ruleForUpdate ) )? )
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8122:7: ( (lv_forinit_2_0= ruleForInit ) )? otherlv_3= ';' ( (lv_expression_4_0= ruleExpression ) )? otherlv_5= ';' ( (lv_forupdate_6_0= ruleForUpdate ) )?
                    {
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8122:7: ( (lv_forinit_2_0= ruleForInit ) )?
                    int alt95=2;
                    int LA95_0 = input.LA(1);

                    if ( (LA95_0==RULE_ID||(LA95_0>=RULE_FLOATING_POINT_LITERAL && LA95_0<=RULE_DECIMAL_LITERAL)||LA95_0==52||LA95_0==57||(LA95_0>=89 && LA95_0<=90)||(LA95_0>=94 && LA95_0<=97)||(LA95_0>=102 && LA95_0<=106)||(LA95_0>=109 && LA95_0<=137)||LA95_0==145) ) {
                        alt95=1;
                    }
                    switch (alt95) {
                        case 1 :
                            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8123:1: (lv_forinit_2_0= ruleForInit )
                            {
                            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8123:1: (lv_forinit_2_0= ruleForInit )
                            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8124:3: lv_forinit_2_0= ruleForInit
                            {
                            if ( state.backtracking==0 ) {
                               
                              	        newCompositeNode(grammarAccess.getForControlAccess().getForinitForInitParserRuleCall_1_1_0_0()); 
                              	    
                            }
                            pushFollow(FOLLOW_ruleForInit_in_ruleForControl18588);
                            lv_forinit_2_0=ruleForInit();

                            state._fsp--;
                            if (state.failed) return current;
                            if ( state.backtracking==0 ) {

                              	        if (current==null) {
                              	            current = createModelElementForParent(grammarAccess.getForControlRule());
                              	        }
                                     		set(
                                     			current, 
                                     			"forinit",
                                      		lv_forinit_2_0, 
                                      		"ForInit");
                              	        afterParserOrEnumRuleCall();
                              	    
                            }

                            }


                            }
                            break;

                    }

                    otherlv_3=(Token)match(input,29,FOLLOW_29_in_ruleForControl18601); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                          	newLeafNode(otherlv_3, grammarAccess.getForControlAccess().getSemicolonKeyword_1_1_1());
                          
                    }
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8144:1: ( (lv_expression_4_0= ruleExpression ) )?
                    int alt96=2;
                    int LA96_0 = input.LA(1);

                    if ( (LA96_0==RULE_ID||(LA96_0>=RULE_FLOATING_POINT_LITERAL && LA96_0<=RULE_DECIMAL_LITERAL)||LA96_0==52||LA96_0==57||(LA96_0>=89 && LA96_0<=90)||(LA96_0>=94 && LA96_0<=97)||(LA96_0>=102 && LA96_0<=106)||(LA96_0>=109 && LA96_0<=137)||LA96_0==145) ) {
                        alt96=1;
                    }
                    switch (alt96) {
                        case 1 :
                            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8145:1: (lv_expression_4_0= ruleExpression )
                            {
                            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8145:1: (lv_expression_4_0= ruleExpression )
                            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8146:3: lv_expression_4_0= ruleExpression
                            {
                            if ( state.backtracking==0 ) {
                               
                              	        newCompositeNode(grammarAccess.getForControlAccess().getExpressionExpressionParserRuleCall_1_1_2_0()); 
                              	    
                            }
                            pushFollow(FOLLOW_ruleExpression_in_ruleForControl18622);
                            lv_expression_4_0=ruleExpression();

                            state._fsp--;
                            if (state.failed) return current;
                            if ( state.backtracking==0 ) {

                              	        if (current==null) {
                              	            current = createModelElementForParent(grammarAccess.getForControlRule());
                              	        }
                                     		set(
                                     			current, 
                                     			"expression",
                                      		lv_expression_4_0, 
                                      		"Expression");
                              	        afterParserOrEnumRuleCall();
                              	    
                            }

                            }


                            }
                            break;

                    }

                    otherlv_5=(Token)match(input,29,FOLLOW_29_in_ruleForControl18635); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                          	newLeafNode(otherlv_5, grammarAccess.getForControlAccess().getSemicolonKeyword_1_1_3());
                          
                    }
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8166:1: ( (lv_forupdate_6_0= ruleForUpdate ) )?
                    int alt97=2;
                    int LA97_0 = input.LA(1);

                    if ( (LA97_0==RULE_ID||(LA97_0>=RULE_FLOATING_POINT_LITERAL && LA97_0<=RULE_DECIMAL_LITERAL)||LA97_0==52||LA97_0==57||(LA97_0>=89 && LA97_0<=90)||(LA97_0>=94 && LA97_0<=97)||(LA97_0>=102 && LA97_0<=106)||(LA97_0>=109 && LA97_0<=137)||LA97_0==145) ) {
                        alt97=1;
                    }
                    switch (alt97) {
                        case 1 :
                            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8167:1: (lv_forupdate_6_0= ruleForUpdate )
                            {
                            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8167:1: (lv_forupdate_6_0= ruleForUpdate )
                            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8168:3: lv_forupdate_6_0= ruleForUpdate
                            {
                            if ( state.backtracking==0 ) {
                               
                              	        newCompositeNode(grammarAccess.getForControlAccess().getForupdateForUpdateParserRuleCall_1_1_4_0()); 
                              	    
                            }
                            pushFollow(FOLLOW_ruleForUpdate_in_ruleForControl18656);
                            lv_forupdate_6_0=ruleForUpdate();

                            state._fsp--;
                            if (state.failed) return current;
                            if ( state.backtracking==0 ) {

                              	        if (current==null) {
                              	            current = createModelElementForParent(grammarAccess.getForControlRule());
                              	        }
                                     		set(
                                     			current, 
                                     			"forupdate",
                                      		lv_forupdate_6_0, 
                                      		"ForUpdate");
                              	        afterParserOrEnumRuleCall();
                              	    
                            }

                            }


                            }
                            break;

                    }


                    }


                    }
                    break;

            }


            }


            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleForControl"


    // $ANTLR start "entryRuleEnhancedForControl"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8192:1: entryRuleEnhancedForControl returns [EObject current=null] : iv_ruleEnhancedForControl= ruleEnhancedForControl EOF ;
    public final EObject entryRuleEnhancedForControl() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleEnhancedForControl = null;


        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8193:2: (iv_ruleEnhancedForControl= ruleEnhancedForControl EOF )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8194:2: iv_ruleEnhancedForControl= ruleEnhancedForControl EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getEnhancedForControlRule()); 
            }
            pushFollow(FOLLOW_ruleEnhancedForControl_in_entryRuleEnhancedForControl18695);
            iv_ruleEnhancedForControl=ruleEnhancedForControl();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleEnhancedForControl; 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRuleEnhancedForControl18705); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleEnhancedForControl"


    // $ANTLR start "ruleEnhancedForControl"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8201:1: ruleEnhancedForControl returns [EObject current=null] : ( ( (lv_type_0_0= ruleUseType ) ) ( (lv_id_1_0= RULE_ID ) ) otherlv_2= ':' ( (lv_expression_3_0= ruleExpression ) ) ) ;
    public final EObject ruleEnhancedForControl() throws RecognitionException {
        EObject current = null;

        Token lv_id_1_0=null;
        Token otherlv_2=null;
        EObject lv_type_0_0 = null;

        EObject lv_expression_3_0 = null;


         enterRule(); 
            
        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8204:28: ( ( ( (lv_type_0_0= ruleUseType ) ) ( (lv_id_1_0= RULE_ID ) ) otherlv_2= ':' ( (lv_expression_3_0= ruleExpression ) ) ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8205:1: ( ( (lv_type_0_0= ruleUseType ) ) ( (lv_id_1_0= RULE_ID ) ) otherlv_2= ':' ( (lv_expression_3_0= ruleExpression ) ) )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8205:1: ( ( (lv_type_0_0= ruleUseType ) ) ( (lv_id_1_0= RULE_ID ) ) otherlv_2= ':' ( (lv_expression_3_0= ruleExpression ) ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8205:2: ( (lv_type_0_0= ruleUseType ) ) ( (lv_id_1_0= RULE_ID ) ) otherlv_2= ':' ( (lv_expression_3_0= ruleExpression ) )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8205:2: ( (lv_type_0_0= ruleUseType ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8206:1: (lv_type_0_0= ruleUseType )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8206:1: (lv_type_0_0= ruleUseType )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8207:3: lv_type_0_0= ruleUseType
            {
            if ( state.backtracking==0 ) {
               
              	        newCompositeNode(grammarAccess.getEnhancedForControlAccess().getTypeUseTypeParserRuleCall_0_0()); 
              	    
            }
            pushFollow(FOLLOW_ruleUseType_in_ruleEnhancedForControl18751);
            lv_type_0_0=ruleUseType();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              	        if (current==null) {
              	            current = createModelElementForParent(grammarAccess.getEnhancedForControlRule());
              	        }
                     		set(
                     			current, 
                     			"type",
                      		lv_type_0_0, 
                      		"UseType");
              	        afterParserOrEnumRuleCall();
              	    
            }

            }


            }

            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8223:2: ( (lv_id_1_0= RULE_ID ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8224:1: (lv_id_1_0= RULE_ID )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8224:1: (lv_id_1_0= RULE_ID )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8225:3: lv_id_1_0= RULE_ID
            {
            lv_id_1_0=(Token)match(input,RULE_ID,FOLLOW_RULE_ID_in_ruleEnhancedForControl18768); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(lv_id_1_0, grammarAccess.getEnhancedForControlAccess().getIdIDTerminalRuleCall_1_0()); 
              		
            }
            if ( state.backtracking==0 ) {

              	        if (current==null) {
              	            current = createModelElement(grammarAccess.getEnhancedForControlRule());
              	        }
                     		setWithLastConsumed(
                     			current, 
                     			"id",
                      		lv_id_1_0, 
                      		"ID");
              	    
            }

            }


            }

            otherlv_2=(Token)match(input,59,FOLLOW_59_in_ruleEnhancedForControl18785); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_2, grammarAccess.getEnhancedForControlAccess().getColonKeyword_2());
                  
            }
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8245:1: ( (lv_expression_3_0= ruleExpression ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8246:1: (lv_expression_3_0= ruleExpression )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8246:1: (lv_expression_3_0= ruleExpression )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8247:3: lv_expression_3_0= ruleExpression
            {
            if ( state.backtracking==0 ) {
               
              	        newCompositeNode(grammarAccess.getEnhancedForControlAccess().getExpressionExpressionParserRuleCall_3_0()); 
              	    
            }
            pushFollow(FOLLOW_ruleExpression_in_ruleEnhancedForControl18806);
            lv_expression_3_0=ruleExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              	        if (current==null) {
              	            current = createModelElementForParent(grammarAccess.getEnhancedForControlRule());
              	        }
                     		set(
                     			current, 
                     			"expression",
                      		lv_expression_3_0, 
                      		"Expression");
              	        afterParserOrEnumRuleCall();
              	    
            }

            }


            }


            }


            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleEnhancedForControl"


    // $ANTLR start "entryRuleForInit"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8271:1: entryRuleForInit returns [EObject current=null] : iv_ruleForInit= ruleForInit EOF ;
    public final EObject entryRuleForInit() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleForInit = null;


        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8272:2: (iv_ruleForInit= ruleForInit EOF )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8273:2: iv_ruleForInit= ruleForInit EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getForInitRule()); 
            }
            pushFollow(FOLLOW_ruleForInit_in_entryRuleForInit18842);
            iv_ruleForInit=ruleForInit();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleForInit; 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRuleForInit18852); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleForInit"


    // $ANTLR start "ruleForInit"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8280:1: ruleForInit returns [EObject current=null] : this_ExpressionList_0= ruleExpressionList ;
    public final EObject ruleForInit() throws RecognitionException {
        EObject current = null;

        EObject this_ExpressionList_0 = null;


         enterRule(); 
            
        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8283:28: (this_ExpressionList_0= ruleExpressionList )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8285:5: this_ExpressionList_0= ruleExpressionList
            {
            if ( state.backtracking==0 ) {
               
                      newCompositeNode(grammarAccess.getForInitAccess().getExpressionListParserRuleCall()); 
                  
            }
            pushFollow(FOLLOW_ruleExpressionList_in_ruleForInit18898);
            this_ExpressionList_0=ruleExpressionList();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               
                      current = this_ExpressionList_0; 
                      afterParserOrEnumRuleCall();
                  
            }

            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleForInit"


    // $ANTLR start "entryRuleForUpdate"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8301:1: entryRuleForUpdate returns [EObject current=null] : iv_ruleForUpdate= ruleForUpdate EOF ;
    public final EObject entryRuleForUpdate() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleForUpdate = null;


        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8302:2: (iv_ruleForUpdate= ruleForUpdate EOF )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8303:2: iv_ruleForUpdate= ruleForUpdate EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getForUpdateRule()); 
            }
            pushFollow(FOLLOW_ruleForUpdate_in_entryRuleForUpdate18932);
            iv_ruleForUpdate=ruleForUpdate();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleForUpdate; 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRuleForUpdate18942); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleForUpdate"


    // $ANTLR start "ruleForUpdate"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8310:1: ruleForUpdate returns [EObject current=null] : this_ExpressionList_0= ruleExpressionList ;
    public final EObject ruleForUpdate() throws RecognitionException {
        EObject current = null;

        EObject this_ExpressionList_0 = null;


         enterRule(); 
            
        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8313:28: (this_ExpressionList_0= ruleExpressionList )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8315:5: this_ExpressionList_0= ruleExpressionList
            {
            if ( state.backtracking==0 ) {
               
                      newCompositeNode(grammarAccess.getForUpdateAccess().getExpressionListParserRuleCall()); 
                  
            }
            pushFollow(FOLLOW_ruleExpressionList_in_ruleForUpdate18988);
            this_ExpressionList_0=ruleExpressionList();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               
                      current = this_ExpressionList_0; 
                      afterParserOrEnumRuleCall();
                  
            }

            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleForUpdate"


    // $ANTLR start "entryRuleCompositionMethod"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8331:1: entryRuleCompositionMethod returns [EObject current=null] : iv_ruleCompositionMethod= ruleCompositionMethod EOF ;
    public final EObject entryRuleCompositionMethod() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleCompositionMethod = null;


        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8332:2: (iv_ruleCompositionMethod= ruleCompositionMethod EOF )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8333:2: iv_ruleCompositionMethod= ruleCompositionMethod EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getCompositionMethodRule()); 
            }
            pushFollow(FOLLOW_ruleCompositionMethod_in_entryRuleCompositionMethod19022);
            iv_ruleCompositionMethod=ruleCompositionMethod();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleCompositionMethod; 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRuleCompositionMethod19032); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleCompositionMethod"


    // $ANTLR start "ruleCompositionMethod"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8340:1: ruleCompositionMethod returns [EObject current=null] : (otherlv_0= 'void' ( (lv_name_1_0= 'Composition' ) ) otherlv_2= '(' otherlv_3= ')' otherlv_4= '{' ( (lv_members_5_0= ruleControlSwitchComposition ) )* otherlv_6= '}' ) ;
    public final EObject ruleCompositionMethod() throws RecognitionException {
        EObject current = null;

        Token otherlv_0=null;
        Token lv_name_1_0=null;
        Token otherlv_2=null;
        Token otherlv_3=null;
        Token otherlv_4=null;
        Token otherlv_6=null;
        EObject lv_members_5_0 = null;


         enterRule(); 
            
        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8343:28: ( (otherlv_0= 'void' ( (lv_name_1_0= 'Composition' ) ) otherlv_2= '(' otherlv_3= ')' otherlv_4= '{' ( (lv_members_5_0= ruleControlSwitchComposition ) )* otherlv_6= '}' ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8344:1: (otherlv_0= 'void' ( (lv_name_1_0= 'Composition' ) ) otherlv_2= '(' otherlv_3= ')' otherlv_4= '{' ( (lv_members_5_0= ruleControlSwitchComposition ) )* otherlv_6= '}' )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8344:1: (otherlv_0= 'void' ( (lv_name_1_0= 'Composition' ) ) otherlv_2= '(' otherlv_3= ')' otherlv_4= '{' ( (lv_members_5_0= ruleControlSwitchComposition ) )* otherlv_6= '}' )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8344:3: otherlv_0= 'void' ( (lv_name_1_0= 'Composition' ) ) otherlv_2= '(' otherlv_3= ')' otherlv_4= '{' ( (lv_members_5_0= ruleControlSwitchComposition ) )* otherlv_6= '}'
            {
            otherlv_0=(Token)match(input,37,FOLLOW_37_in_ruleCompositionMethod19069); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_0, grammarAccess.getCompositionMethodAccess().getVoidKeyword_0());
                  
            }
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8348:1: ( (lv_name_1_0= 'Composition' ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8349:1: (lv_name_1_0= 'Composition' )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8349:1: (lv_name_1_0= 'Composition' )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8350:3: lv_name_1_0= 'Composition'
            {
            lv_name_1_0=(Token)match(input,62,FOLLOW_62_in_ruleCompositionMethod19087); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                      newLeafNode(lv_name_1_0, grammarAccess.getCompositionMethodAccess().getNameCompositionKeyword_1_0());
                  
            }
            if ( state.backtracking==0 ) {

              	        if (current==null) {
              	            current = createModelElement(grammarAccess.getCompositionMethodRule());
              	        }
                     		setWithLastConsumed(current, "name", lv_name_1_0, "Composition");
              	    
            }

            }


            }

            otherlv_2=(Token)match(input,52,FOLLOW_52_in_ruleCompositionMethod19112); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_2, grammarAccess.getCompositionMethodAccess().getLeftParenthesisKeyword_2());
                  
            }
            otherlv_3=(Token)match(input,54,FOLLOW_54_in_ruleCompositionMethod19124); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_3, grammarAccess.getCompositionMethodAccess().getRightParenthesisKeyword_3());
                  
            }
            otherlv_4=(Token)match(input,47,FOLLOW_47_in_ruleCompositionMethod19136); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_4, grammarAccess.getCompositionMethodAccess().getLeftCurlyBracketKeyword_4());
                  
            }
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8375:1: ( (lv_members_5_0= ruleControlSwitchComposition ) )*
            loop99:
            do {
                int alt99=2;
                int LA99_0 = input.LA(1);

                if ( (LA99_0==RULE_ID) ) {
                    alt99=1;
                }


                switch (alt99) {
            	case 1 :
            	    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8376:1: (lv_members_5_0= ruleControlSwitchComposition )
            	    {
            	    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8376:1: (lv_members_5_0= ruleControlSwitchComposition )
            	    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8377:3: lv_members_5_0= ruleControlSwitchComposition
            	    {
            	    if ( state.backtracking==0 ) {
            	       
            	      	        newCompositeNode(grammarAccess.getCompositionMethodAccess().getMembersControlSwitchCompositionParserRuleCall_5_0()); 
            	      	    
            	    }
            	    pushFollow(FOLLOW_ruleControlSwitchComposition_in_ruleCompositionMethod19157);
            	    lv_members_5_0=ruleControlSwitchComposition();

            	    state._fsp--;
            	    if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      	        if (current==null) {
            	      	            current = createModelElementForParent(grammarAccess.getCompositionMethodRule());
            	      	        }
            	             		add(
            	             			current, 
            	             			"members",
            	              		lv_members_5_0, 
            	              		"ControlSwitchComposition");
            	      	        afterParserOrEnumRuleCall();
            	      	    
            	    }

            	    }


            	    }
            	    break;

            	default :
            	    break loop99;
                }
            } while (true);

            otherlv_6=(Token)match(input,48,FOLLOW_48_in_ruleCompositionMethod19170); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_6, grammarAccess.getCompositionMethodAccess().getRightCurlyBracketKeyword_6());
                  
            }

            }


            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleCompositionMethod"


    // $ANTLR start "entryRuleControlSwitchComposition"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8405:1: entryRuleControlSwitchComposition returns [EObject current=null] : iv_ruleControlSwitchComposition= ruleControlSwitchComposition EOF ;
    public final EObject entryRuleControlSwitchComposition() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleControlSwitchComposition = null;


        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8406:2: (iv_ruleControlSwitchComposition= ruleControlSwitchComposition EOF )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8407:2: iv_ruleControlSwitchComposition= ruleControlSwitchComposition EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getControlSwitchCompositionRule()); 
            }
            pushFollow(FOLLOW_ruleControlSwitchComposition_in_entryRuleControlSwitchComposition19206);
            iv_ruleControlSwitchComposition=ruleControlSwitchComposition();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleControlSwitchComposition; 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRuleControlSwitchComposition19216); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleControlSwitchComposition"


    // $ANTLR start "ruleControlSwitchComposition"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8414:1: ruleControlSwitchComposition returns [EObject current=null] : ( () ( ( (lv_id_1_0= RULE_ID ) ) ( ( ( (lv_sync_2_0= '(' ) ) otherlv_3= ')' ) | ( (lv_recev_4_0= '(?)' ) ) | ( (lv_send_5_0= '(!)' ) ) )? otherlv_6= '(' ( ( (lv_source_7_0= ruleExpression ) ) | (otherlv_8= '{' ( (lv_sourcelist_9_0= ruleExpressionList ) ) otherlv_10= '}' ) ) otherlv_11= ',' ( (lv_action_12_0= ruleExpression ) )? otherlv_13= ',' ( ( (lv_destination_14_0= ruleExpression ) ) | (otherlv_15= '{' ( (lv_destinationlist_16_0= ruleExpressionList ) ) otherlv_17= '}' ) ) otherlv_18= ')' otherlv_19= '{' ( (lv_condition_20_0= ruleConditionBlock ) )? ( (lv_discrete_21_0= ruleDiscreteBlock ) )? otherlv_22= '}' ) ) ;
    public final EObject ruleControlSwitchComposition() throws RecognitionException {
        EObject current = null;

        Token lv_id_1_0=null;
        Token lv_sync_2_0=null;
        Token otherlv_3=null;
        Token lv_recev_4_0=null;
        Token lv_send_5_0=null;
        Token otherlv_6=null;
        Token otherlv_8=null;
        Token otherlv_10=null;
        Token otherlv_11=null;
        Token otherlv_13=null;
        Token otherlv_15=null;
        Token otherlv_17=null;
        Token otherlv_18=null;
        Token otherlv_19=null;
        Token otherlv_22=null;
        EObject lv_source_7_0 = null;

        EObject lv_sourcelist_9_0 = null;

        EObject lv_action_12_0 = null;

        EObject lv_destination_14_0 = null;

        EObject lv_destinationlist_16_0 = null;

        EObject lv_condition_20_0 = null;

        EObject lv_discrete_21_0 = null;


         enterRule(); 
            
        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8417:28: ( ( () ( ( (lv_id_1_0= RULE_ID ) ) ( ( ( (lv_sync_2_0= '(' ) ) otherlv_3= ')' ) | ( (lv_recev_4_0= '(?)' ) ) | ( (lv_send_5_0= '(!)' ) ) )? otherlv_6= '(' ( ( (lv_source_7_0= ruleExpression ) ) | (otherlv_8= '{' ( (lv_sourcelist_9_0= ruleExpressionList ) ) otherlv_10= '}' ) ) otherlv_11= ',' ( (lv_action_12_0= ruleExpression ) )? otherlv_13= ',' ( ( (lv_destination_14_0= ruleExpression ) ) | (otherlv_15= '{' ( (lv_destinationlist_16_0= ruleExpressionList ) ) otherlv_17= '}' ) ) otherlv_18= ')' otherlv_19= '{' ( (lv_condition_20_0= ruleConditionBlock ) )? ( (lv_discrete_21_0= ruleDiscreteBlock ) )? otherlv_22= '}' ) ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8418:1: ( () ( ( (lv_id_1_0= RULE_ID ) ) ( ( ( (lv_sync_2_0= '(' ) ) otherlv_3= ')' ) | ( (lv_recev_4_0= '(?)' ) ) | ( (lv_send_5_0= '(!)' ) ) )? otherlv_6= '(' ( ( (lv_source_7_0= ruleExpression ) ) | (otherlv_8= '{' ( (lv_sourcelist_9_0= ruleExpressionList ) ) otherlv_10= '}' ) ) otherlv_11= ',' ( (lv_action_12_0= ruleExpression ) )? otherlv_13= ',' ( ( (lv_destination_14_0= ruleExpression ) ) | (otherlv_15= '{' ( (lv_destinationlist_16_0= ruleExpressionList ) ) otherlv_17= '}' ) ) otherlv_18= ')' otherlv_19= '{' ( (lv_condition_20_0= ruleConditionBlock ) )? ( (lv_discrete_21_0= ruleDiscreteBlock ) )? otherlv_22= '}' ) )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8418:1: ( () ( ( (lv_id_1_0= RULE_ID ) ) ( ( ( (lv_sync_2_0= '(' ) ) otherlv_3= ')' ) | ( (lv_recev_4_0= '(?)' ) ) | ( (lv_send_5_0= '(!)' ) ) )? otherlv_6= '(' ( ( (lv_source_7_0= ruleExpression ) ) | (otherlv_8= '{' ( (lv_sourcelist_9_0= ruleExpressionList ) ) otherlv_10= '}' ) ) otherlv_11= ',' ( (lv_action_12_0= ruleExpression ) )? otherlv_13= ',' ( ( (lv_destination_14_0= ruleExpression ) ) | (otherlv_15= '{' ( (lv_destinationlist_16_0= ruleExpressionList ) ) otherlv_17= '}' ) ) otherlv_18= ')' otherlv_19= '{' ( (lv_condition_20_0= ruleConditionBlock ) )? ( (lv_discrete_21_0= ruleDiscreteBlock ) )? otherlv_22= '}' ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8418:2: () ( ( (lv_id_1_0= RULE_ID ) ) ( ( ( (lv_sync_2_0= '(' ) ) otherlv_3= ')' ) | ( (lv_recev_4_0= '(?)' ) ) | ( (lv_send_5_0= '(!)' ) ) )? otherlv_6= '(' ( ( (lv_source_7_0= ruleExpression ) ) | (otherlv_8= '{' ( (lv_sourcelist_9_0= ruleExpressionList ) ) otherlv_10= '}' ) ) otherlv_11= ',' ( (lv_action_12_0= ruleExpression ) )? otherlv_13= ',' ( ( (lv_destination_14_0= ruleExpression ) ) | (otherlv_15= '{' ( (lv_destinationlist_16_0= ruleExpressionList ) ) otherlv_17= '}' ) ) otherlv_18= ')' otherlv_19= '{' ( (lv_condition_20_0= ruleConditionBlock ) )? ( (lv_discrete_21_0= ruleDiscreteBlock ) )? otherlv_22= '}' )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8418:2: ()
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8419:5: 
            {
            if ( state.backtracking==0 ) {

                      current = forceCreateModelElement(
                          grammarAccess.getControlSwitchCompositionAccess().getControlSwitchCompositionAction_0(),
                          current);
                  
            }

            }

            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8424:2: ( ( (lv_id_1_0= RULE_ID ) ) ( ( ( (lv_sync_2_0= '(' ) ) otherlv_3= ')' ) | ( (lv_recev_4_0= '(?)' ) ) | ( (lv_send_5_0= '(!)' ) ) )? otherlv_6= '(' ( ( (lv_source_7_0= ruleExpression ) ) | (otherlv_8= '{' ( (lv_sourcelist_9_0= ruleExpressionList ) ) otherlv_10= '}' ) ) otherlv_11= ',' ( (lv_action_12_0= ruleExpression ) )? otherlv_13= ',' ( ( (lv_destination_14_0= ruleExpression ) ) | (otherlv_15= '{' ( (lv_destinationlist_16_0= ruleExpressionList ) ) otherlv_17= '}' ) ) otherlv_18= ')' otherlv_19= '{' ( (lv_condition_20_0= ruleConditionBlock ) )? ( (lv_discrete_21_0= ruleDiscreteBlock ) )? otherlv_22= '}' )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8424:3: ( (lv_id_1_0= RULE_ID ) ) ( ( ( (lv_sync_2_0= '(' ) ) otherlv_3= ')' ) | ( (lv_recev_4_0= '(?)' ) ) | ( (lv_send_5_0= '(!)' ) ) )? otherlv_6= '(' ( ( (lv_source_7_0= ruleExpression ) ) | (otherlv_8= '{' ( (lv_sourcelist_9_0= ruleExpressionList ) ) otherlv_10= '}' ) ) otherlv_11= ',' ( (lv_action_12_0= ruleExpression ) )? otherlv_13= ',' ( ( (lv_destination_14_0= ruleExpression ) ) | (otherlv_15= '{' ( (lv_destinationlist_16_0= ruleExpressionList ) ) otherlv_17= '}' ) ) otherlv_18= ')' otherlv_19= '{' ( (lv_condition_20_0= ruleConditionBlock ) )? ( (lv_discrete_21_0= ruleDiscreteBlock ) )? otherlv_22= '}'
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8424:3: ( (lv_id_1_0= RULE_ID ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8425:1: (lv_id_1_0= RULE_ID )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8425:1: (lv_id_1_0= RULE_ID )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8426:3: lv_id_1_0= RULE_ID
            {
            lv_id_1_0=(Token)match(input,RULE_ID,FOLLOW_RULE_ID_in_ruleControlSwitchComposition19268); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(lv_id_1_0, grammarAccess.getControlSwitchCompositionAccess().getIdIDTerminalRuleCall_1_0_0()); 
              		
            }
            if ( state.backtracking==0 ) {

              	        if (current==null) {
              	            current = createModelElement(grammarAccess.getControlSwitchCompositionRule());
              	        }
                     		setWithLastConsumed(
                     			current, 
                     			"id",
                      		lv_id_1_0, 
                      		"ID");
              	    
            }

            }


            }

            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8442:2: ( ( ( (lv_sync_2_0= '(' ) ) otherlv_3= ')' ) | ( (lv_recev_4_0= '(?)' ) ) | ( (lv_send_5_0= '(!)' ) ) )?
            int alt100=4;
            switch ( input.LA(1) ) {
                case 52:
                    {
                    int LA100_1 = input.LA(2);

                    if ( (LA100_1==54) ) {
                        alt100=1;
                    }
                    }
                    break;
                case 101:
                    {
                    alt100=2;
                    }
                    break;
                case 100:
                    {
                    alt100=3;
                    }
                    break;
            }

            switch (alt100) {
                case 1 :
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8442:3: ( ( (lv_sync_2_0= '(' ) ) otherlv_3= ')' )
                    {
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8442:3: ( ( (lv_sync_2_0= '(' ) ) otherlv_3= ')' )
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8442:4: ( (lv_sync_2_0= '(' ) ) otherlv_3= ')'
                    {
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8442:4: ( (lv_sync_2_0= '(' ) )
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8443:1: (lv_sync_2_0= '(' )
                    {
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8443:1: (lv_sync_2_0= '(' )
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8444:3: lv_sync_2_0= '('
                    {
                    lv_sync_2_0=(Token)match(input,52,FOLLOW_52_in_ruleControlSwitchComposition19293); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                              newLeafNode(lv_sync_2_0, grammarAccess.getControlSwitchCompositionAccess().getSyncLeftParenthesisKeyword_1_1_0_0_0());
                          
                    }
                    if ( state.backtracking==0 ) {

                      	        if (current==null) {
                      	            current = createModelElement(grammarAccess.getControlSwitchCompositionRule());
                      	        }
                             		setWithLastConsumed(current, "sync", lv_sync_2_0, "(");
                      	    
                    }

                    }


                    }

                    otherlv_3=(Token)match(input,54,FOLLOW_54_in_ruleControlSwitchComposition19318); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                          	newLeafNode(otherlv_3, grammarAccess.getControlSwitchCompositionAccess().getRightParenthesisKeyword_1_1_0_1());
                          
                    }

                    }


                    }
                    break;
                case 2 :
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8462:6: ( (lv_recev_4_0= '(?)' ) )
                    {
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8462:6: ( (lv_recev_4_0= '(?)' ) )
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8463:1: (lv_recev_4_0= '(?)' )
                    {
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8463:1: (lv_recev_4_0= '(?)' )
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8464:3: lv_recev_4_0= '(?)'
                    {
                    lv_recev_4_0=(Token)match(input,101,FOLLOW_101_in_ruleControlSwitchComposition19343); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                              newLeafNode(lv_recev_4_0, grammarAccess.getControlSwitchCompositionAccess().getRecevLeftParenthesisQuestionMarkRightParenthesisKeyword_1_1_1_0());
                          
                    }
                    if ( state.backtracking==0 ) {

                      	        if (current==null) {
                      	            current = createModelElement(grammarAccess.getControlSwitchCompositionRule());
                      	        }
                             		setWithLastConsumed(current, "recev", lv_recev_4_0, "(?)");
                      	    
                    }

                    }


                    }


                    }
                    break;
                case 3 :
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8478:6: ( (lv_send_5_0= '(!)' ) )
                    {
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8478:6: ( (lv_send_5_0= '(!)' ) )
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8479:1: (lv_send_5_0= '(!)' )
                    {
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8479:1: (lv_send_5_0= '(!)' )
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8480:3: lv_send_5_0= '(!)'
                    {
                    lv_send_5_0=(Token)match(input,100,FOLLOW_100_in_ruleControlSwitchComposition19380); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                              newLeafNode(lv_send_5_0, grammarAccess.getControlSwitchCompositionAccess().getSendLeftParenthesisExclamationMarkRightParenthesisKeyword_1_1_2_0());
                          
                    }
                    if ( state.backtracking==0 ) {

                      	        if (current==null) {
                      	            current = createModelElement(grammarAccess.getControlSwitchCompositionRule());
                      	        }
                             		setWithLastConsumed(current, "send", lv_send_5_0, "(!)");
                      	    
                    }

                    }


                    }


                    }
                    break;

            }

            otherlv_6=(Token)match(input,52,FOLLOW_52_in_ruleControlSwitchComposition19407); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_6, grammarAccess.getControlSwitchCompositionAccess().getLeftParenthesisKeyword_1_2());
                  
            }
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8497:1: ( ( (lv_source_7_0= ruleExpression ) ) | (otherlv_8= '{' ( (lv_sourcelist_9_0= ruleExpressionList ) ) otherlv_10= '}' ) )
            int alt101=2;
            int LA101_0 = input.LA(1);

            if ( (LA101_0==RULE_ID||(LA101_0>=RULE_FLOATING_POINT_LITERAL && LA101_0<=RULE_DECIMAL_LITERAL)||LA101_0==52||LA101_0==57||(LA101_0>=89 && LA101_0<=90)||(LA101_0>=94 && LA101_0<=97)||(LA101_0>=102 && LA101_0<=106)||(LA101_0>=109 && LA101_0<=137)||LA101_0==145) ) {
                alt101=1;
            }
            else if ( (LA101_0==47) ) {
                alt101=2;
            }
            else {
                if (state.backtracking>0) {state.failed=true; return current;}
                NoViableAltException nvae =
                    new NoViableAltException("", 101, 0, input);

                throw nvae;
            }
            switch (alt101) {
                case 1 :
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8497:2: ( (lv_source_7_0= ruleExpression ) )
                    {
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8497:2: ( (lv_source_7_0= ruleExpression ) )
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8498:1: (lv_source_7_0= ruleExpression )
                    {
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8498:1: (lv_source_7_0= ruleExpression )
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8499:3: lv_source_7_0= ruleExpression
                    {
                    if ( state.backtracking==0 ) {
                       
                      	        newCompositeNode(grammarAccess.getControlSwitchCompositionAccess().getSourceExpressionParserRuleCall_1_3_0_0()); 
                      	    
                    }
                    pushFollow(FOLLOW_ruleExpression_in_ruleControlSwitchComposition19429);
                    lv_source_7_0=ruleExpression();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      	        if (current==null) {
                      	            current = createModelElementForParent(grammarAccess.getControlSwitchCompositionRule());
                      	        }
                             		set(
                             			current, 
                             			"source",
                              		lv_source_7_0, 
                              		"Expression");
                      	        afterParserOrEnumRuleCall();
                      	    
                    }

                    }


                    }


                    }
                    break;
                case 2 :
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8516:6: (otherlv_8= '{' ( (lv_sourcelist_9_0= ruleExpressionList ) ) otherlv_10= '}' )
                    {
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8516:6: (otherlv_8= '{' ( (lv_sourcelist_9_0= ruleExpressionList ) ) otherlv_10= '}' )
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8516:8: otherlv_8= '{' ( (lv_sourcelist_9_0= ruleExpressionList ) ) otherlv_10= '}'
                    {
                    otherlv_8=(Token)match(input,47,FOLLOW_47_in_ruleControlSwitchComposition19448); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                          	newLeafNode(otherlv_8, grammarAccess.getControlSwitchCompositionAccess().getLeftCurlyBracketKeyword_1_3_1_0());
                          
                    }
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8520:1: ( (lv_sourcelist_9_0= ruleExpressionList ) )
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8521:1: (lv_sourcelist_9_0= ruleExpressionList )
                    {
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8521:1: (lv_sourcelist_9_0= ruleExpressionList )
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8522:3: lv_sourcelist_9_0= ruleExpressionList
                    {
                    if ( state.backtracking==0 ) {
                       
                      	        newCompositeNode(grammarAccess.getControlSwitchCompositionAccess().getSourcelistExpressionListParserRuleCall_1_3_1_1_0()); 
                      	    
                    }
                    pushFollow(FOLLOW_ruleExpressionList_in_ruleControlSwitchComposition19469);
                    lv_sourcelist_9_0=ruleExpressionList();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      	        if (current==null) {
                      	            current = createModelElementForParent(grammarAccess.getControlSwitchCompositionRule());
                      	        }
                             		set(
                             			current, 
                             			"sourcelist",
                              		lv_sourcelist_9_0, 
                              		"ExpressionList");
                      	        afterParserOrEnumRuleCall();
                      	    
                    }

                    }


                    }

                    otherlv_10=(Token)match(input,48,FOLLOW_48_in_ruleControlSwitchComposition19481); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                          	newLeafNode(otherlv_10, grammarAccess.getControlSwitchCompositionAccess().getRightCurlyBracketKeyword_1_3_1_2());
                          
                    }

                    }


                    }
                    break;

            }

            otherlv_11=(Token)match(input,53,FOLLOW_53_in_ruleControlSwitchComposition19495); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_11, grammarAccess.getControlSwitchCompositionAccess().getCommaKeyword_1_4());
                  
            }
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8546:1: ( (lv_action_12_0= ruleExpression ) )?
            int alt102=2;
            int LA102_0 = input.LA(1);

            if ( (LA102_0==RULE_ID||(LA102_0>=RULE_FLOATING_POINT_LITERAL && LA102_0<=RULE_DECIMAL_LITERAL)||LA102_0==52||LA102_0==57||(LA102_0>=89 && LA102_0<=90)||(LA102_0>=94 && LA102_0<=97)||(LA102_0>=102 && LA102_0<=106)||(LA102_0>=109 && LA102_0<=137)||LA102_0==145) ) {
                alt102=1;
            }
            switch (alt102) {
                case 1 :
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8547:1: (lv_action_12_0= ruleExpression )
                    {
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8547:1: (lv_action_12_0= ruleExpression )
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8548:3: lv_action_12_0= ruleExpression
                    {
                    if ( state.backtracking==0 ) {
                       
                      	        newCompositeNode(grammarAccess.getControlSwitchCompositionAccess().getActionExpressionParserRuleCall_1_5_0()); 
                      	    
                    }
                    pushFollow(FOLLOW_ruleExpression_in_ruleControlSwitchComposition19516);
                    lv_action_12_0=ruleExpression();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      	        if (current==null) {
                      	            current = createModelElementForParent(grammarAccess.getControlSwitchCompositionRule());
                      	        }
                             		set(
                             			current, 
                             			"action",
                              		lv_action_12_0, 
                              		"Expression");
                      	        afterParserOrEnumRuleCall();
                      	    
                    }

                    }


                    }
                    break;

            }

            otherlv_13=(Token)match(input,53,FOLLOW_53_in_ruleControlSwitchComposition19529); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_13, grammarAccess.getControlSwitchCompositionAccess().getCommaKeyword_1_6());
                  
            }
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8568:1: ( ( (lv_destination_14_0= ruleExpression ) ) | (otherlv_15= '{' ( (lv_destinationlist_16_0= ruleExpressionList ) ) otherlv_17= '}' ) )
            int alt103=2;
            int LA103_0 = input.LA(1);

            if ( (LA103_0==RULE_ID||(LA103_0>=RULE_FLOATING_POINT_LITERAL && LA103_0<=RULE_DECIMAL_LITERAL)||LA103_0==52||LA103_0==57||(LA103_0>=89 && LA103_0<=90)||(LA103_0>=94 && LA103_0<=97)||(LA103_0>=102 && LA103_0<=106)||(LA103_0>=109 && LA103_0<=137)||LA103_0==145) ) {
                alt103=1;
            }
            else if ( (LA103_0==47) ) {
                alt103=2;
            }
            else {
                if (state.backtracking>0) {state.failed=true; return current;}
                NoViableAltException nvae =
                    new NoViableAltException("", 103, 0, input);

                throw nvae;
            }
            switch (alt103) {
                case 1 :
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8568:2: ( (lv_destination_14_0= ruleExpression ) )
                    {
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8568:2: ( (lv_destination_14_0= ruleExpression ) )
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8569:1: (lv_destination_14_0= ruleExpression )
                    {
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8569:1: (lv_destination_14_0= ruleExpression )
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8570:3: lv_destination_14_0= ruleExpression
                    {
                    if ( state.backtracking==0 ) {
                       
                      	        newCompositeNode(grammarAccess.getControlSwitchCompositionAccess().getDestinationExpressionParserRuleCall_1_7_0_0()); 
                      	    
                    }
                    pushFollow(FOLLOW_ruleExpression_in_ruleControlSwitchComposition19551);
                    lv_destination_14_0=ruleExpression();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      	        if (current==null) {
                      	            current = createModelElementForParent(grammarAccess.getControlSwitchCompositionRule());
                      	        }
                             		set(
                             			current, 
                             			"destination",
                              		lv_destination_14_0, 
                              		"Expression");
                      	        afterParserOrEnumRuleCall();
                      	    
                    }

                    }


                    }


                    }
                    break;
                case 2 :
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8587:6: (otherlv_15= '{' ( (lv_destinationlist_16_0= ruleExpressionList ) ) otherlv_17= '}' )
                    {
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8587:6: (otherlv_15= '{' ( (lv_destinationlist_16_0= ruleExpressionList ) ) otherlv_17= '}' )
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8587:8: otherlv_15= '{' ( (lv_destinationlist_16_0= ruleExpressionList ) ) otherlv_17= '}'
                    {
                    otherlv_15=(Token)match(input,47,FOLLOW_47_in_ruleControlSwitchComposition19570); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                          	newLeafNode(otherlv_15, grammarAccess.getControlSwitchCompositionAccess().getLeftCurlyBracketKeyword_1_7_1_0());
                          
                    }
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8591:1: ( (lv_destinationlist_16_0= ruleExpressionList ) )
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8592:1: (lv_destinationlist_16_0= ruleExpressionList )
                    {
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8592:1: (lv_destinationlist_16_0= ruleExpressionList )
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8593:3: lv_destinationlist_16_0= ruleExpressionList
                    {
                    if ( state.backtracking==0 ) {
                       
                      	        newCompositeNode(grammarAccess.getControlSwitchCompositionAccess().getDestinationlistExpressionListParserRuleCall_1_7_1_1_0()); 
                      	    
                    }
                    pushFollow(FOLLOW_ruleExpressionList_in_ruleControlSwitchComposition19591);
                    lv_destinationlist_16_0=ruleExpressionList();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      	        if (current==null) {
                      	            current = createModelElementForParent(grammarAccess.getControlSwitchCompositionRule());
                      	        }
                             		set(
                             			current, 
                             			"destinationlist",
                              		lv_destinationlist_16_0, 
                              		"ExpressionList");
                      	        afterParserOrEnumRuleCall();
                      	    
                    }

                    }


                    }

                    otherlv_17=(Token)match(input,48,FOLLOW_48_in_ruleControlSwitchComposition19603); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                          	newLeafNode(otherlv_17, grammarAccess.getControlSwitchCompositionAccess().getRightCurlyBracketKeyword_1_7_1_2());
                          
                    }

                    }


                    }
                    break;

            }

            otherlv_18=(Token)match(input,54,FOLLOW_54_in_ruleControlSwitchComposition19617); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_18, grammarAccess.getControlSwitchCompositionAccess().getRightParenthesisKeyword_1_8());
                  
            }
            otherlv_19=(Token)match(input,47,FOLLOW_47_in_ruleControlSwitchComposition19629); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_19, grammarAccess.getControlSwitchCompositionAccess().getLeftCurlyBracketKeyword_1_9());
                  
            }
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8621:1: ( (lv_condition_20_0= ruleConditionBlock ) )?
            int alt104=2;
            int LA104_0 = input.LA(1);

            if ( (LA104_0==61) ) {
                alt104=1;
            }
            switch (alt104) {
                case 1 :
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8622:1: (lv_condition_20_0= ruleConditionBlock )
                    {
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8622:1: (lv_condition_20_0= ruleConditionBlock )
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8623:3: lv_condition_20_0= ruleConditionBlock
                    {
                    if ( state.backtracking==0 ) {
                       
                      	        newCompositeNode(grammarAccess.getControlSwitchCompositionAccess().getConditionConditionBlockParserRuleCall_1_10_0()); 
                      	    
                    }
                    pushFollow(FOLLOW_ruleConditionBlock_in_ruleControlSwitchComposition19650);
                    lv_condition_20_0=ruleConditionBlock();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      	        if (current==null) {
                      	            current = createModelElementForParent(grammarAccess.getControlSwitchCompositionRule());
                      	        }
                             		set(
                             			current, 
                             			"condition",
                              		lv_condition_20_0, 
                              		"ConditionBlock");
                      	        afterParserOrEnumRuleCall();
                      	    
                    }

                    }


                    }
                    break;

            }

            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8639:3: ( (lv_discrete_21_0= ruleDiscreteBlock ) )?
            int alt105=2;
            int LA105_0 = input.LA(1);

            if ( (LA105_0==64) ) {
                alt105=1;
            }
            switch (alt105) {
                case 1 :
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8640:1: (lv_discrete_21_0= ruleDiscreteBlock )
                    {
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8640:1: (lv_discrete_21_0= ruleDiscreteBlock )
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8641:3: lv_discrete_21_0= ruleDiscreteBlock
                    {
                    if ( state.backtracking==0 ) {
                       
                      	        newCompositeNode(grammarAccess.getControlSwitchCompositionAccess().getDiscreteDiscreteBlockParserRuleCall_1_11_0()); 
                      	    
                    }
                    pushFollow(FOLLOW_ruleDiscreteBlock_in_ruleControlSwitchComposition19672);
                    lv_discrete_21_0=ruleDiscreteBlock();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      	        if (current==null) {
                      	            current = createModelElementForParent(grammarAccess.getControlSwitchCompositionRule());
                      	        }
                             		set(
                             			current, 
                             			"discrete",
                              		lv_discrete_21_0, 
                              		"DiscreteBlock");
                      	        afterParserOrEnumRuleCall();
                      	    
                    }

                    }


                    }
                    break;

            }

            otherlv_22=(Token)match(input,48,FOLLOW_48_in_ruleControlSwitchComposition19685); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_22, grammarAccess.getControlSwitchCompositionAccess().getRightCurlyBracketKeyword_1_12());
                  
            }

            }


            }


            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleControlSwitchComposition"


    // $ANTLR start "entryRuleDiscreteBlock"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8669:1: entryRuleDiscreteBlock returns [EObject current=null] : iv_ruleDiscreteBlock= ruleDiscreteBlock EOF ;
    public final EObject entryRuleDiscreteBlock() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleDiscreteBlock = null;


        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8670:2: (iv_ruleDiscreteBlock= ruleDiscreteBlock EOF )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8671:2: iv_ruleDiscreteBlock= ruleDiscreteBlock EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getDiscreteBlockRule()); 
            }
            pushFollow(FOLLOW_ruleDiscreteBlock_in_entryRuleDiscreteBlock19722);
            iv_ruleDiscreteBlock=ruleDiscreteBlock();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleDiscreteBlock; 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRuleDiscreteBlock19732); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleDiscreteBlock"


    // $ANTLR start "ruleDiscreteBlock"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8678:1: ruleDiscreteBlock returns [EObject current=null] : ( ( (lv_BuiltInName_0_0= 'Discrete' ) ) otherlv_1= '{' ( (lv_statements_2_0= ruleBlockStatement ) )* otherlv_3= '}' (otherlv_4= ';' )? ) ;
    public final EObject ruleDiscreteBlock() throws RecognitionException {
        EObject current = null;

        Token lv_BuiltInName_0_0=null;
        Token otherlv_1=null;
        Token otherlv_3=null;
        Token otherlv_4=null;
        EObject lv_statements_2_0 = null;


         enterRule(); 
            
        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8681:28: ( ( ( (lv_BuiltInName_0_0= 'Discrete' ) ) otherlv_1= '{' ( (lv_statements_2_0= ruleBlockStatement ) )* otherlv_3= '}' (otherlv_4= ';' )? ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8682:1: ( ( (lv_BuiltInName_0_0= 'Discrete' ) ) otherlv_1= '{' ( (lv_statements_2_0= ruleBlockStatement ) )* otherlv_3= '}' (otherlv_4= ';' )? )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8682:1: ( ( (lv_BuiltInName_0_0= 'Discrete' ) ) otherlv_1= '{' ( (lv_statements_2_0= ruleBlockStatement ) )* otherlv_3= '}' (otherlv_4= ';' )? )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8682:2: ( (lv_BuiltInName_0_0= 'Discrete' ) ) otherlv_1= '{' ( (lv_statements_2_0= ruleBlockStatement ) )* otherlv_3= '}' (otherlv_4= ';' )?
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8682:2: ( (lv_BuiltInName_0_0= 'Discrete' ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8683:1: (lv_BuiltInName_0_0= 'Discrete' )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8683:1: (lv_BuiltInName_0_0= 'Discrete' )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8684:3: lv_BuiltInName_0_0= 'Discrete'
            {
            lv_BuiltInName_0_0=(Token)match(input,64,FOLLOW_64_in_ruleDiscreteBlock19775); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                      newLeafNode(lv_BuiltInName_0_0, grammarAccess.getDiscreteBlockAccess().getBuiltInNameDiscreteKeyword_0_0());
                  
            }
            if ( state.backtracking==0 ) {

              	        if (current==null) {
              	            current = createModelElement(grammarAccess.getDiscreteBlockRule());
              	        }
                     		setWithLastConsumed(current, "BuiltInName", lv_BuiltInName_0_0, "Discrete");
              	    
            }

            }


            }

            otherlv_1=(Token)match(input,47,FOLLOW_47_in_ruleDiscreteBlock19800); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_1, grammarAccess.getDiscreteBlockAccess().getLeftCurlyBracketKeyword_1());
                  
            }
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8701:1: ( (lv_statements_2_0= ruleBlockStatement ) )*
            loop106:
            do {
                int alt106=2;
                int LA106_0 = input.LA(1);

                if ( (LA106_0==RULE_ID||(LA106_0>=RULE_FLOATING_POINT_LITERAL && LA106_0<=RULE_DECIMAL_LITERAL)||LA106_0==29||LA106_0==35||(LA106_0>=37 && LA106_0<=44)||LA106_0==47||LA106_0==52||LA106_0==55||LA106_0==57||(LA106_0>=89 && LA106_0<=90)||(LA106_0>=94 && LA106_0<=97)||(LA106_0>=102 && LA106_0<=106)||(LA106_0>=109 && LA106_0<=138)||(LA106_0>=140 && LA106_0<=143)||LA106_0==145) ) {
                    alt106=1;
                }


                switch (alt106) {
            	case 1 :
            	    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8702:1: (lv_statements_2_0= ruleBlockStatement )
            	    {
            	    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8702:1: (lv_statements_2_0= ruleBlockStatement )
            	    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8703:3: lv_statements_2_0= ruleBlockStatement
            	    {
            	    if ( state.backtracking==0 ) {
            	       
            	      	        newCompositeNode(grammarAccess.getDiscreteBlockAccess().getStatementsBlockStatementParserRuleCall_2_0()); 
            	      	    
            	    }
            	    pushFollow(FOLLOW_ruleBlockStatement_in_ruleDiscreteBlock19821);
            	    lv_statements_2_0=ruleBlockStatement();

            	    state._fsp--;
            	    if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      	        if (current==null) {
            	      	            current = createModelElementForParent(grammarAccess.getDiscreteBlockRule());
            	      	        }
            	             		add(
            	             			current, 
            	             			"statements",
            	              		lv_statements_2_0, 
            	              		"BlockStatement");
            	      	        afterParserOrEnumRuleCall();
            	      	    
            	    }

            	    }


            	    }
            	    break;

            	default :
            	    break loop106;
                }
            } while (true);

            otherlv_3=(Token)match(input,48,FOLLOW_48_in_ruleDiscreteBlock19834); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_3, grammarAccess.getDiscreteBlockAccess().getRightCurlyBracketKeyword_3());
                  
            }
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8723:1: (otherlv_4= ';' )?
            int alt107=2;
            int LA107_0 = input.LA(1);

            if ( (LA107_0==29) ) {
                alt107=1;
            }
            switch (alt107) {
                case 1 :
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8723:3: otherlv_4= ';'
                    {
                    otherlv_4=(Token)match(input,29,FOLLOW_29_in_ruleDiscreteBlock19847); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                          	newLeafNode(otherlv_4, grammarAccess.getDiscreteBlockAccess().getSemicolonKeyword_4());
                          
                    }

                    }
                    break;

            }


            }


            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleDiscreteBlock"


    // $ANTLR start "entryRuleConditionBlock"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8735:1: entryRuleConditionBlock returns [EObject current=null] : iv_ruleConditionBlock= ruleConditionBlock EOF ;
    public final EObject entryRuleConditionBlock() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleConditionBlock = null;


        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8736:2: (iv_ruleConditionBlock= ruleConditionBlock EOF )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8737:2: iv_ruleConditionBlock= ruleConditionBlock EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getConditionBlockRule()); 
            }
            pushFollow(FOLLOW_ruleConditionBlock_in_entryRuleConditionBlock19885);
            iv_ruleConditionBlock=ruleConditionBlock();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleConditionBlock; 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRuleConditionBlock19895); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleConditionBlock"


    // $ANTLR start "ruleConditionBlock"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8744:1: ruleConditionBlock returns [EObject current=null] : ( ( (lv_BuiltInName_0_0= 'Condition' ) ) otherlv_1= '{' ( ( (lv_conditions_2_0= ruleConditionalExpression ) ) otherlv_3= ';' )* otherlv_4= '}' (otherlv_5= ';' )? ) ;
    public final EObject ruleConditionBlock() throws RecognitionException {
        EObject current = null;

        Token lv_BuiltInName_0_0=null;
        Token otherlv_1=null;
        Token otherlv_3=null;
        Token otherlv_4=null;
        Token otherlv_5=null;
        EObject lv_conditions_2_0 = null;


         enterRule(); 
            
        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8747:28: ( ( ( (lv_BuiltInName_0_0= 'Condition' ) ) otherlv_1= '{' ( ( (lv_conditions_2_0= ruleConditionalExpression ) ) otherlv_3= ';' )* otherlv_4= '}' (otherlv_5= ';' )? ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8748:1: ( ( (lv_BuiltInName_0_0= 'Condition' ) ) otherlv_1= '{' ( ( (lv_conditions_2_0= ruleConditionalExpression ) ) otherlv_3= ';' )* otherlv_4= '}' (otherlv_5= ';' )? )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8748:1: ( ( (lv_BuiltInName_0_0= 'Condition' ) ) otherlv_1= '{' ( ( (lv_conditions_2_0= ruleConditionalExpression ) ) otherlv_3= ';' )* otherlv_4= '}' (otherlv_5= ';' )? )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8748:2: ( (lv_BuiltInName_0_0= 'Condition' ) ) otherlv_1= '{' ( ( (lv_conditions_2_0= ruleConditionalExpression ) ) otherlv_3= ';' )* otherlv_4= '}' (otherlv_5= ';' )?
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8748:2: ( (lv_BuiltInName_0_0= 'Condition' ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8749:1: (lv_BuiltInName_0_0= 'Condition' )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8749:1: (lv_BuiltInName_0_0= 'Condition' )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8750:3: lv_BuiltInName_0_0= 'Condition'
            {
            lv_BuiltInName_0_0=(Token)match(input,61,FOLLOW_61_in_ruleConditionBlock19938); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                      newLeafNode(lv_BuiltInName_0_0, grammarAccess.getConditionBlockAccess().getBuiltInNameConditionKeyword_0_0());
                  
            }
            if ( state.backtracking==0 ) {

              	        if (current==null) {
              	            current = createModelElement(grammarAccess.getConditionBlockRule());
              	        }
                     		setWithLastConsumed(current, "BuiltInName", lv_BuiltInName_0_0, "Condition");
              	    
            }

            }


            }

            otherlv_1=(Token)match(input,47,FOLLOW_47_in_ruleConditionBlock19963); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_1, grammarAccess.getConditionBlockAccess().getLeftCurlyBracketKeyword_1());
                  
            }
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8767:1: ( ( (lv_conditions_2_0= ruleConditionalExpression ) ) otherlv_3= ';' )*
            loop108:
            do {
                int alt108=2;
                int LA108_0 = input.LA(1);

                if ( (LA108_0==RULE_ID||(LA108_0>=RULE_FLOATING_POINT_LITERAL && LA108_0<=RULE_DECIMAL_LITERAL)||LA108_0==52||LA108_0==57||(LA108_0>=89 && LA108_0<=90)||(LA108_0>=94 && LA108_0<=97)||(LA108_0>=102 && LA108_0<=106)||(LA108_0>=109 && LA108_0<=137)||LA108_0==145) ) {
                    alt108=1;
                }


                switch (alt108) {
            	case 1 :
            	    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8767:2: ( (lv_conditions_2_0= ruleConditionalExpression ) ) otherlv_3= ';'
            	    {
            	    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8767:2: ( (lv_conditions_2_0= ruleConditionalExpression ) )
            	    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8768:1: (lv_conditions_2_0= ruleConditionalExpression )
            	    {
            	    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8768:1: (lv_conditions_2_0= ruleConditionalExpression )
            	    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8769:3: lv_conditions_2_0= ruleConditionalExpression
            	    {
            	    if ( state.backtracking==0 ) {
            	       
            	      	        newCompositeNode(grammarAccess.getConditionBlockAccess().getConditionsConditionalExpressionParserRuleCall_2_0_0()); 
            	      	    
            	    }
            	    pushFollow(FOLLOW_ruleConditionalExpression_in_ruleConditionBlock19985);
            	    lv_conditions_2_0=ruleConditionalExpression();

            	    state._fsp--;
            	    if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      	        if (current==null) {
            	      	            current = createModelElementForParent(grammarAccess.getConditionBlockRule());
            	      	        }
            	             		add(
            	             			current, 
            	             			"conditions",
            	              		lv_conditions_2_0, 
            	              		"ConditionalExpression");
            	      	        afterParserOrEnumRuleCall();
            	      	    
            	    }

            	    }


            	    }

            	    otherlv_3=(Token)match(input,29,FOLLOW_29_in_ruleConditionBlock19997); if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	          	newLeafNode(otherlv_3, grammarAccess.getConditionBlockAccess().getSemicolonKeyword_2_1());
            	          
            	    }

            	    }
            	    break;

            	default :
            	    break loop108;
                }
            } while (true);

            otherlv_4=(Token)match(input,48,FOLLOW_48_in_ruleConditionBlock20011); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_4, grammarAccess.getConditionBlockAccess().getRightCurlyBracketKeyword_3());
                  
            }
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8793:1: (otherlv_5= ';' )?
            int alt109=2;
            int LA109_0 = input.LA(1);

            if ( (LA109_0==29) ) {
                alt109=1;
            }
            switch (alt109) {
                case 1 :
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8793:3: otherlv_5= ';'
                    {
                    otherlv_5=(Token)match(input,29,FOLLOW_29_in_ruleConditionBlock20024); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                          	newLeafNode(otherlv_5, grammarAccess.getConditionBlockAccess().getSemicolonKeyword_4());
                          
                    }

                    }
                    break;

            }


            }


            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleConditionBlock"


    // $ANTLR start "entryRuleDiscreteMethod"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8805:1: entryRuleDiscreteMethod returns [EObject current=null] : iv_ruleDiscreteMethod= ruleDiscreteMethod EOF ;
    public final EObject entryRuleDiscreteMethod() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleDiscreteMethod = null;


        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8806:2: (iv_ruleDiscreteMethod= ruleDiscreteMethod EOF )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8807:2: iv_ruleDiscreteMethod= ruleDiscreteMethod EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getDiscreteMethodRule()); 
            }
            pushFollow(FOLLOW_ruleDiscreteMethod_in_entryRuleDiscreteMethod20062);
            iv_ruleDiscreteMethod=ruleDiscreteMethod();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleDiscreteMethod; 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRuleDiscreteMethod20072); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleDiscreteMethod"


    // $ANTLR start "ruleDiscreteMethod"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8814:1: ruleDiscreteMethod returns [EObject current=null] : (otherlv_0= 'void' ( (lv_name_1_0= 'Discrete' ) ) otherlv_2= '(' ( ( (lv_params_3_0= ruleParameter ) ) (otherlv_4= ',' ( (lv_params_5_0= ruleParameter ) ) )* )? otherlv_6= ')' otherlv_7= '{' ( (lv_statements_8_0= ruleBlockStatement ) )* otherlv_9= '}' ) ;
    public final EObject ruleDiscreteMethod() throws RecognitionException {
        EObject current = null;

        Token otherlv_0=null;
        Token lv_name_1_0=null;
        Token otherlv_2=null;
        Token otherlv_4=null;
        Token otherlv_6=null;
        Token otherlv_7=null;
        Token otherlv_9=null;
        EObject lv_params_3_0 = null;

        EObject lv_params_5_0 = null;

        EObject lv_statements_8_0 = null;


         enterRule(); 
            
        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8817:28: ( (otherlv_0= 'void' ( (lv_name_1_0= 'Discrete' ) ) otherlv_2= '(' ( ( (lv_params_3_0= ruleParameter ) ) (otherlv_4= ',' ( (lv_params_5_0= ruleParameter ) ) )* )? otherlv_6= ')' otherlv_7= '{' ( (lv_statements_8_0= ruleBlockStatement ) )* otherlv_9= '}' ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8818:1: (otherlv_0= 'void' ( (lv_name_1_0= 'Discrete' ) ) otherlv_2= '(' ( ( (lv_params_3_0= ruleParameter ) ) (otherlv_4= ',' ( (lv_params_5_0= ruleParameter ) ) )* )? otherlv_6= ')' otherlv_7= '{' ( (lv_statements_8_0= ruleBlockStatement ) )* otherlv_9= '}' )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8818:1: (otherlv_0= 'void' ( (lv_name_1_0= 'Discrete' ) ) otherlv_2= '(' ( ( (lv_params_3_0= ruleParameter ) ) (otherlv_4= ',' ( (lv_params_5_0= ruleParameter ) ) )* )? otherlv_6= ')' otherlv_7= '{' ( (lv_statements_8_0= ruleBlockStatement ) )* otherlv_9= '}' )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8818:3: otherlv_0= 'void' ( (lv_name_1_0= 'Discrete' ) ) otherlv_2= '(' ( ( (lv_params_3_0= ruleParameter ) ) (otherlv_4= ',' ( (lv_params_5_0= ruleParameter ) ) )* )? otherlv_6= ')' otherlv_7= '{' ( (lv_statements_8_0= ruleBlockStatement ) )* otherlv_9= '}'
            {
            otherlv_0=(Token)match(input,37,FOLLOW_37_in_ruleDiscreteMethod20109); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_0, grammarAccess.getDiscreteMethodAccess().getVoidKeyword_0());
                  
            }
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8822:1: ( (lv_name_1_0= 'Discrete' ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8823:1: (lv_name_1_0= 'Discrete' )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8823:1: (lv_name_1_0= 'Discrete' )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8824:3: lv_name_1_0= 'Discrete'
            {
            lv_name_1_0=(Token)match(input,64,FOLLOW_64_in_ruleDiscreteMethod20127); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                      newLeafNode(lv_name_1_0, grammarAccess.getDiscreteMethodAccess().getNameDiscreteKeyword_1_0());
                  
            }
            if ( state.backtracking==0 ) {

              	        if (current==null) {
              	            current = createModelElement(grammarAccess.getDiscreteMethodRule());
              	        }
                     		setWithLastConsumed(current, "name", lv_name_1_0, "Discrete");
              	    
            }

            }


            }

            otherlv_2=(Token)match(input,52,FOLLOW_52_in_ruleDiscreteMethod20152); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_2, grammarAccess.getDiscreteMethodAccess().getLeftParenthesisKeyword_2());
                  
            }
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8841:1: ( ( (lv_params_3_0= ruleParameter ) ) (otherlv_4= ',' ( (lv_params_5_0= ruleParameter ) ) )* )?
            int alt111=2;
            int LA111_0 = input.LA(1);

            if ( (LA111_0==RULE_ID||(LA111_0>=37 && LA111_0<=44)) ) {
                alt111=1;
            }
            switch (alt111) {
                case 1 :
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8841:2: ( (lv_params_3_0= ruleParameter ) ) (otherlv_4= ',' ( (lv_params_5_0= ruleParameter ) ) )*
                    {
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8841:2: ( (lv_params_3_0= ruleParameter ) )
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8842:1: (lv_params_3_0= ruleParameter )
                    {
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8842:1: (lv_params_3_0= ruleParameter )
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8843:3: lv_params_3_0= ruleParameter
                    {
                    if ( state.backtracking==0 ) {
                       
                      	        newCompositeNode(grammarAccess.getDiscreteMethodAccess().getParamsParameterParserRuleCall_3_0_0()); 
                      	    
                    }
                    pushFollow(FOLLOW_ruleParameter_in_ruleDiscreteMethod20174);
                    lv_params_3_0=ruleParameter();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      	        if (current==null) {
                      	            current = createModelElementForParent(grammarAccess.getDiscreteMethodRule());
                      	        }
                             		add(
                             			current, 
                             			"params",
                              		lv_params_3_0, 
                              		"Parameter");
                      	        afterParserOrEnumRuleCall();
                      	    
                    }

                    }


                    }

                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8859:2: (otherlv_4= ',' ( (lv_params_5_0= ruleParameter ) ) )*
                    loop110:
                    do {
                        int alt110=2;
                        int LA110_0 = input.LA(1);

                        if ( (LA110_0==53) ) {
                            alt110=1;
                        }


                        switch (alt110) {
                    	case 1 :
                    	    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8859:4: otherlv_4= ',' ( (lv_params_5_0= ruleParameter ) )
                    	    {
                    	    otherlv_4=(Token)match(input,53,FOLLOW_53_in_ruleDiscreteMethod20187); if (state.failed) return current;
                    	    if ( state.backtracking==0 ) {

                    	          	newLeafNode(otherlv_4, grammarAccess.getDiscreteMethodAccess().getCommaKeyword_3_1_0());
                    	          
                    	    }
                    	    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8863:1: ( (lv_params_5_0= ruleParameter ) )
                    	    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8864:1: (lv_params_5_0= ruleParameter )
                    	    {
                    	    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8864:1: (lv_params_5_0= ruleParameter )
                    	    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8865:3: lv_params_5_0= ruleParameter
                    	    {
                    	    if ( state.backtracking==0 ) {
                    	       
                    	      	        newCompositeNode(grammarAccess.getDiscreteMethodAccess().getParamsParameterParserRuleCall_3_1_1_0()); 
                    	      	    
                    	    }
                    	    pushFollow(FOLLOW_ruleParameter_in_ruleDiscreteMethod20208);
                    	    lv_params_5_0=ruleParameter();

                    	    state._fsp--;
                    	    if (state.failed) return current;
                    	    if ( state.backtracking==0 ) {

                    	      	        if (current==null) {
                    	      	            current = createModelElementForParent(grammarAccess.getDiscreteMethodRule());
                    	      	        }
                    	             		add(
                    	             			current, 
                    	             			"params",
                    	              		lv_params_5_0, 
                    	              		"Parameter");
                    	      	        afterParserOrEnumRuleCall();
                    	      	    
                    	    }

                    	    }


                    	    }


                    	    }
                    	    break;

                    	default :
                    	    break loop110;
                        }
                    } while (true);


                    }
                    break;

            }

            otherlv_6=(Token)match(input,54,FOLLOW_54_in_ruleDiscreteMethod20224); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_6, grammarAccess.getDiscreteMethodAccess().getRightParenthesisKeyword_4());
                  
            }
            otherlv_7=(Token)match(input,47,FOLLOW_47_in_ruleDiscreteMethod20236); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_7, grammarAccess.getDiscreteMethodAccess().getLeftCurlyBracketKeyword_5());
                  
            }
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8889:1: ( (lv_statements_8_0= ruleBlockStatement ) )*
            loop112:
            do {
                int alt112=2;
                int LA112_0 = input.LA(1);

                if ( (LA112_0==RULE_ID||(LA112_0>=RULE_FLOATING_POINT_LITERAL && LA112_0<=RULE_DECIMAL_LITERAL)||LA112_0==29||LA112_0==35||(LA112_0>=37 && LA112_0<=44)||LA112_0==47||LA112_0==52||LA112_0==55||LA112_0==57||(LA112_0>=89 && LA112_0<=90)||(LA112_0>=94 && LA112_0<=97)||(LA112_0>=102 && LA112_0<=106)||(LA112_0>=109 && LA112_0<=138)||(LA112_0>=140 && LA112_0<=143)||LA112_0==145) ) {
                    alt112=1;
                }


                switch (alt112) {
            	case 1 :
            	    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8890:1: (lv_statements_8_0= ruleBlockStatement )
            	    {
            	    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8890:1: (lv_statements_8_0= ruleBlockStatement )
            	    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8891:3: lv_statements_8_0= ruleBlockStatement
            	    {
            	    if ( state.backtracking==0 ) {
            	       
            	      	        newCompositeNode(grammarAccess.getDiscreteMethodAccess().getStatementsBlockStatementParserRuleCall_6_0()); 
            	      	    
            	    }
            	    pushFollow(FOLLOW_ruleBlockStatement_in_ruleDiscreteMethod20257);
            	    lv_statements_8_0=ruleBlockStatement();

            	    state._fsp--;
            	    if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      	        if (current==null) {
            	      	            current = createModelElementForParent(grammarAccess.getDiscreteMethodRule());
            	      	        }
            	             		add(
            	             			current, 
            	             			"statements",
            	              		lv_statements_8_0, 
            	              		"BlockStatement");
            	      	        afterParserOrEnumRuleCall();
            	      	    
            	    }

            	    }


            	    }
            	    break;

            	default :
            	    break loop112;
                }
            } while (true);

            otherlv_9=(Token)match(input,48,FOLLOW_48_in_ruleDiscreteMethod20270); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_9, grammarAccess.getDiscreteMethodAccess().getRightCurlyBracketKeyword_7());
                  
            }

            }


            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleDiscreteMethod"


    // $ANTLR start "entryRuleAbstractDiscreteMethod"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8919:1: entryRuleAbstractDiscreteMethod returns [EObject current=null] : iv_ruleAbstractDiscreteMethod= ruleAbstractDiscreteMethod EOF ;
    public final EObject entryRuleAbstractDiscreteMethod() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleAbstractDiscreteMethod = null;


        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8920:2: (iv_ruleAbstractDiscreteMethod= ruleAbstractDiscreteMethod EOF )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8921:2: iv_ruleAbstractDiscreteMethod= ruleAbstractDiscreteMethod EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getAbstractDiscreteMethodRule()); 
            }
            pushFollow(FOLLOW_ruleAbstractDiscreteMethod_in_entryRuleAbstractDiscreteMethod20306);
            iv_ruleAbstractDiscreteMethod=ruleAbstractDiscreteMethod();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleAbstractDiscreteMethod; 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRuleAbstractDiscreteMethod20316); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleAbstractDiscreteMethod"


    // $ANTLR start "ruleAbstractDiscreteMethod"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8928:1: ruleAbstractDiscreteMethod returns [EObject current=null] : (otherlv_0= 'void' ( (lv_name_1_0= 'Discrete' ) ) otherlv_2= '(' ( ( (lv_params_3_0= ruleParameter ) ) (otherlv_4= ',' ( (lv_params_5_0= ruleParameter ) ) )* )? otherlv_6= ')' otherlv_7= ';' ) ;
    public final EObject ruleAbstractDiscreteMethod() throws RecognitionException {
        EObject current = null;

        Token otherlv_0=null;
        Token lv_name_1_0=null;
        Token otherlv_2=null;
        Token otherlv_4=null;
        Token otherlv_6=null;
        Token otherlv_7=null;
        EObject lv_params_3_0 = null;

        EObject lv_params_5_0 = null;


         enterRule(); 
            
        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8931:28: ( (otherlv_0= 'void' ( (lv_name_1_0= 'Discrete' ) ) otherlv_2= '(' ( ( (lv_params_3_0= ruleParameter ) ) (otherlv_4= ',' ( (lv_params_5_0= ruleParameter ) ) )* )? otherlv_6= ')' otherlv_7= ';' ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8932:1: (otherlv_0= 'void' ( (lv_name_1_0= 'Discrete' ) ) otherlv_2= '(' ( ( (lv_params_3_0= ruleParameter ) ) (otherlv_4= ',' ( (lv_params_5_0= ruleParameter ) ) )* )? otherlv_6= ')' otherlv_7= ';' )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8932:1: (otherlv_0= 'void' ( (lv_name_1_0= 'Discrete' ) ) otherlv_2= '(' ( ( (lv_params_3_0= ruleParameter ) ) (otherlv_4= ',' ( (lv_params_5_0= ruleParameter ) ) )* )? otherlv_6= ')' otherlv_7= ';' )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8932:3: otherlv_0= 'void' ( (lv_name_1_0= 'Discrete' ) ) otherlv_2= '(' ( ( (lv_params_3_0= ruleParameter ) ) (otherlv_4= ',' ( (lv_params_5_0= ruleParameter ) ) )* )? otherlv_6= ')' otherlv_7= ';'
            {
            otherlv_0=(Token)match(input,37,FOLLOW_37_in_ruleAbstractDiscreteMethod20353); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_0, grammarAccess.getAbstractDiscreteMethodAccess().getVoidKeyword_0());
                  
            }
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8936:1: ( (lv_name_1_0= 'Discrete' ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8937:1: (lv_name_1_0= 'Discrete' )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8937:1: (lv_name_1_0= 'Discrete' )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8938:3: lv_name_1_0= 'Discrete'
            {
            lv_name_1_0=(Token)match(input,64,FOLLOW_64_in_ruleAbstractDiscreteMethod20371); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                      newLeafNode(lv_name_1_0, grammarAccess.getAbstractDiscreteMethodAccess().getNameDiscreteKeyword_1_0());
                  
            }
            if ( state.backtracking==0 ) {

              	        if (current==null) {
              	            current = createModelElement(grammarAccess.getAbstractDiscreteMethodRule());
              	        }
                     		setWithLastConsumed(current, "name", lv_name_1_0, "Discrete");
              	    
            }

            }


            }

            otherlv_2=(Token)match(input,52,FOLLOW_52_in_ruleAbstractDiscreteMethod20396); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_2, grammarAccess.getAbstractDiscreteMethodAccess().getLeftParenthesisKeyword_2());
                  
            }
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8955:1: ( ( (lv_params_3_0= ruleParameter ) ) (otherlv_4= ',' ( (lv_params_5_0= ruleParameter ) ) )* )?
            int alt114=2;
            int LA114_0 = input.LA(1);

            if ( (LA114_0==RULE_ID||(LA114_0>=37 && LA114_0<=44)) ) {
                alt114=1;
            }
            switch (alt114) {
                case 1 :
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8955:2: ( (lv_params_3_0= ruleParameter ) ) (otherlv_4= ',' ( (lv_params_5_0= ruleParameter ) ) )*
                    {
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8955:2: ( (lv_params_3_0= ruleParameter ) )
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8956:1: (lv_params_3_0= ruleParameter )
                    {
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8956:1: (lv_params_3_0= ruleParameter )
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8957:3: lv_params_3_0= ruleParameter
                    {
                    if ( state.backtracking==0 ) {
                       
                      	        newCompositeNode(grammarAccess.getAbstractDiscreteMethodAccess().getParamsParameterParserRuleCall_3_0_0()); 
                      	    
                    }
                    pushFollow(FOLLOW_ruleParameter_in_ruleAbstractDiscreteMethod20418);
                    lv_params_3_0=ruleParameter();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      	        if (current==null) {
                      	            current = createModelElementForParent(grammarAccess.getAbstractDiscreteMethodRule());
                      	        }
                             		add(
                             			current, 
                             			"params",
                              		lv_params_3_0, 
                              		"Parameter");
                      	        afterParserOrEnumRuleCall();
                      	    
                    }

                    }


                    }

                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8973:2: (otherlv_4= ',' ( (lv_params_5_0= ruleParameter ) ) )*
                    loop113:
                    do {
                        int alt113=2;
                        int LA113_0 = input.LA(1);

                        if ( (LA113_0==53) ) {
                            alt113=1;
                        }


                        switch (alt113) {
                    	case 1 :
                    	    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8973:4: otherlv_4= ',' ( (lv_params_5_0= ruleParameter ) )
                    	    {
                    	    otherlv_4=(Token)match(input,53,FOLLOW_53_in_ruleAbstractDiscreteMethod20431); if (state.failed) return current;
                    	    if ( state.backtracking==0 ) {

                    	          	newLeafNode(otherlv_4, grammarAccess.getAbstractDiscreteMethodAccess().getCommaKeyword_3_1_0());
                    	          
                    	    }
                    	    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8977:1: ( (lv_params_5_0= ruleParameter ) )
                    	    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8978:1: (lv_params_5_0= ruleParameter )
                    	    {
                    	    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8978:1: (lv_params_5_0= ruleParameter )
                    	    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:8979:3: lv_params_5_0= ruleParameter
                    	    {
                    	    if ( state.backtracking==0 ) {
                    	       
                    	      	        newCompositeNode(grammarAccess.getAbstractDiscreteMethodAccess().getParamsParameterParserRuleCall_3_1_1_0()); 
                    	      	    
                    	    }
                    	    pushFollow(FOLLOW_ruleParameter_in_ruleAbstractDiscreteMethod20452);
                    	    lv_params_5_0=ruleParameter();

                    	    state._fsp--;
                    	    if (state.failed) return current;
                    	    if ( state.backtracking==0 ) {

                    	      	        if (current==null) {
                    	      	            current = createModelElementForParent(grammarAccess.getAbstractDiscreteMethodRule());
                    	      	        }
                    	             		add(
                    	             			current, 
                    	             			"params",
                    	              		lv_params_5_0, 
                    	              		"Parameter");
                    	      	        afterParserOrEnumRuleCall();
                    	      	    
                    	    }

                    	    }


                    	    }


                    	    }
                    	    break;

                    	default :
                    	    break loop113;
                        }
                    } while (true);


                    }
                    break;

            }

            otherlv_6=(Token)match(input,54,FOLLOW_54_in_ruleAbstractDiscreteMethod20468); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_6, grammarAccess.getAbstractDiscreteMethodAccess().getRightParenthesisKeyword_4());
                  
            }
            otherlv_7=(Token)match(input,29,FOLLOW_29_in_ruleAbstractDiscreteMethod20480); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_7, grammarAccess.getAbstractDiscreteMethodAccess().getSemicolonKeyword_5());
                  
            }

            }


            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleAbstractDiscreteMethod"


    // $ANTLR start "entryRuleInitMethod"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:9011:1: entryRuleInitMethod returns [EObject current=null] : iv_ruleInitMethod= ruleInitMethod EOF ;
    public final EObject entryRuleInitMethod() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleInitMethod = null;


        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:9012:2: (iv_ruleInitMethod= ruleInitMethod EOF )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:9013:2: iv_ruleInitMethod= ruleInitMethod EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getInitMethodRule()); 
            }
            pushFollow(FOLLOW_ruleInitMethod_in_entryRuleInitMethod20516);
            iv_ruleInitMethod=ruleInitMethod();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleInitMethod; 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRuleInitMethod20526); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleInitMethod"


    // $ANTLR start "ruleInitMethod"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:9020:1: ruleInitMethod returns [EObject current=null] : (otherlv_0= 'void' ( (lv_name_1_0= 'Init' ) ) otherlv_2= '(' otherlv_3= ')' otherlv_4= '{' ( (lv_statements_5_0= ruleBlockStatement ) )* otherlv_6= '}' ) ;
    public final EObject ruleInitMethod() throws RecognitionException {
        EObject current = null;

        Token otherlv_0=null;
        Token lv_name_1_0=null;
        Token otherlv_2=null;
        Token otherlv_3=null;
        Token otherlv_4=null;
        Token otherlv_6=null;
        EObject lv_statements_5_0 = null;


         enterRule(); 
            
        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:9023:28: ( (otherlv_0= 'void' ( (lv_name_1_0= 'Init' ) ) otherlv_2= '(' otherlv_3= ')' otherlv_4= '{' ( (lv_statements_5_0= ruleBlockStatement ) )* otherlv_6= '}' ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:9024:1: (otherlv_0= 'void' ( (lv_name_1_0= 'Init' ) ) otherlv_2= '(' otherlv_3= ')' otherlv_4= '{' ( (lv_statements_5_0= ruleBlockStatement ) )* otherlv_6= '}' )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:9024:1: (otherlv_0= 'void' ( (lv_name_1_0= 'Init' ) ) otherlv_2= '(' otherlv_3= ')' otherlv_4= '{' ( (lv_statements_5_0= ruleBlockStatement ) )* otherlv_6= '}' )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:9024:3: otherlv_0= 'void' ( (lv_name_1_0= 'Init' ) ) otherlv_2= '(' otherlv_3= ')' otherlv_4= '{' ( (lv_statements_5_0= ruleBlockStatement ) )* otherlv_6= '}'
            {
            otherlv_0=(Token)match(input,37,FOLLOW_37_in_ruleInitMethod20563); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_0, grammarAccess.getInitMethodAccess().getVoidKeyword_0());
                  
            }
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:9028:1: ( (lv_name_1_0= 'Init' ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:9029:1: (lv_name_1_0= 'Init' )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:9029:1: (lv_name_1_0= 'Init' )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:9030:3: lv_name_1_0= 'Init'
            {
            lv_name_1_0=(Token)match(input,144,FOLLOW_144_in_ruleInitMethod20581); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                      newLeafNode(lv_name_1_0, grammarAccess.getInitMethodAccess().getNameInitKeyword_1_0());
                  
            }
            if ( state.backtracking==0 ) {

              	        if (current==null) {
              	            current = createModelElement(grammarAccess.getInitMethodRule());
              	        }
                     		setWithLastConsumed(current, "name", lv_name_1_0, "Init");
              	    
            }

            }


            }

            otherlv_2=(Token)match(input,52,FOLLOW_52_in_ruleInitMethod20606); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_2, grammarAccess.getInitMethodAccess().getLeftParenthesisKeyword_2());
                  
            }
            otherlv_3=(Token)match(input,54,FOLLOW_54_in_ruleInitMethod20618); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_3, grammarAccess.getInitMethodAccess().getRightParenthesisKeyword_3());
                  
            }
            otherlv_4=(Token)match(input,47,FOLLOW_47_in_ruleInitMethod20630); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_4, grammarAccess.getInitMethodAccess().getLeftCurlyBracketKeyword_4());
                  
            }
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:9055:1: ( (lv_statements_5_0= ruleBlockStatement ) )*
            loop115:
            do {
                int alt115=2;
                int LA115_0 = input.LA(1);

                if ( (LA115_0==RULE_ID||(LA115_0>=RULE_FLOATING_POINT_LITERAL && LA115_0<=RULE_DECIMAL_LITERAL)||LA115_0==29||LA115_0==35||(LA115_0>=37 && LA115_0<=44)||LA115_0==47||LA115_0==52||LA115_0==55||LA115_0==57||(LA115_0>=89 && LA115_0<=90)||(LA115_0>=94 && LA115_0<=97)||(LA115_0>=102 && LA115_0<=106)||(LA115_0>=109 && LA115_0<=138)||(LA115_0>=140 && LA115_0<=143)||LA115_0==145) ) {
                    alt115=1;
                }


                switch (alt115) {
            	case 1 :
            	    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:9056:1: (lv_statements_5_0= ruleBlockStatement )
            	    {
            	    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:9056:1: (lv_statements_5_0= ruleBlockStatement )
            	    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:9057:3: lv_statements_5_0= ruleBlockStatement
            	    {
            	    if ( state.backtracking==0 ) {
            	       
            	      	        newCompositeNode(grammarAccess.getInitMethodAccess().getStatementsBlockStatementParserRuleCall_5_0()); 
            	      	    
            	    }
            	    pushFollow(FOLLOW_ruleBlockStatement_in_ruleInitMethod20651);
            	    lv_statements_5_0=ruleBlockStatement();

            	    state._fsp--;
            	    if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      	        if (current==null) {
            	      	            current = createModelElementForParent(grammarAccess.getInitMethodRule());
            	      	        }
            	             		add(
            	             			current, 
            	             			"statements",
            	              		lv_statements_5_0, 
            	              		"BlockStatement");
            	      	        afterParserOrEnumRuleCall();
            	      	    
            	    }

            	    }


            	    }
            	    break;

            	default :
            	    break loop115;
                }
            } while (true);

            otherlv_6=(Token)match(input,48,FOLLOW_48_in_ruleInitMethod20664); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_6, grammarAccess.getInitMethodAccess().getRightCurlyBracketKeyword_6());
                  
            }

            }


            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleInitMethod"


    // $ANTLR start "entryRuleAbstractInitMethod"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:9085:1: entryRuleAbstractInitMethod returns [EObject current=null] : iv_ruleAbstractInitMethod= ruleAbstractInitMethod EOF ;
    public final EObject entryRuleAbstractInitMethod() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleAbstractInitMethod = null;


        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:9086:2: (iv_ruleAbstractInitMethod= ruleAbstractInitMethod EOF )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:9087:2: iv_ruleAbstractInitMethod= ruleAbstractInitMethod EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getAbstractInitMethodRule()); 
            }
            pushFollow(FOLLOW_ruleAbstractInitMethod_in_entryRuleAbstractInitMethod20700);
            iv_ruleAbstractInitMethod=ruleAbstractInitMethod();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleAbstractInitMethod; 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRuleAbstractInitMethod20710); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleAbstractInitMethod"


    // $ANTLR start "ruleAbstractInitMethod"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:9094:1: ruleAbstractInitMethod returns [EObject current=null] : (otherlv_0= 'void' ( (lv_name_1_0= 'Init' ) ) otherlv_2= '(' otherlv_3= ')' otherlv_4= ';' ) ;
    public final EObject ruleAbstractInitMethod() throws RecognitionException {
        EObject current = null;

        Token otherlv_0=null;
        Token lv_name_1_0=null;
        Token otherlv_2=null;
        Token otherlv_3=null;
        Token otherlv_4=null;

         enterRule(); 
            
        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:9097:28: ( (otherlv_0= 'void' ( (lv_name_1_0= 'Init' ) ) otherlv_2= '(' otherlv_3= ')' otherlv_4= ';' ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:9098:1: (otherlv_0= 'void' ( (lv_name_1_0= 'Init' ) ) otherlv_2= '(' otherlv_3= ')' otherlv_4= ';' )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:9098:1: (otherlv_0= 'void' ( (lv_name_1_0= 'Init' ) ) otherlv_2= '(' otherlv_3= ')' otherlv_4= ';' )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:9098:3: otherlv_0= 'void' ( (lv_name_1_0= 'Init' ) ) otherlv_2= '(' otherlv_3= ')' otherlv_4= ';'
            {
            otherlv_0=(Token)match(input,37,FOLLOW_37_in_ruleAbstractInitMethod20747); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_0, grammarAccess.getAbstractInitMethodAccess().getVoidKeyword_0());
                  
            }
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:9102:1: ( (lv_name_1_0= 'Init' ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:9103:1: (lv_name_1_0= 'Init' )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:9103:1: (lv_name_1_0= 'Init' )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:9104:3: lv_name_1_0= 'Init'
            {
            lv_name_1_0=(Token)match(input,144,FOLLOW_144_in_ruleAbstractInitMethod20765); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                      newLeafNode(lv_name_1_0, grammarAccess.getAbstractInitMethodAccess().getNameInitKeyword_1_0());
                  
            }
            if ( state.backtracking==0 ) {

              	        if (current==null) {
              	            current = createModelElement(grammarAccess.getAbstractInitMethodRule());
              	        }
                     		setWithLastConsumed(current, "name", lv_name_1_0, "Init");
              	    
            }

            }


            }

            otherlv_2=(Token)match(input,52,FOLLOW_52_in_ruleAbstractInitMethod20790); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_2, grammarAccess.getAbstractInitMethodAccess().getLeftParenthesisKeyword_2());
                  
            }
            otherlv_3=(Token)match(input,54,FOLLOW_54_in_ruleAbstractInitMethod20802); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_3, grammarAccess.getAbstractInitMethodAccess().getRightParenthesisKeyword_3());
                  
            }
            otherlv_4=(Token)match(input,29,FOLLOW_29_in_ruleAbstractInitMethod20814); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_4, grammarAccess.getAbstractInitMethodAccess().getSemicolonKeyword_4());
                  
            }

            }


            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleAbstractInitMethod"


    // $ANTLR start "entryRuleNewByClass"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:9137:1: entryRuleNewByClass returns [EObject current=null] : iv_ruleNewByClass= ruleNewByClass EOF ;
    public final EObject entryRuleNewByClass() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleNewByClass = null;


        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:9138:2: (iv_ruleNewByClass= ruleNewByClass EOF )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:9139:2: iv_ruleNewByClass= ruleNewByClass EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getNewByClassRule()); 
            }
            pushFollow(FOLLOW_ruleNewByClass_in_entryRuleNewByClass20850);
            iv_ruleNewByClass=ruleNewByClass();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleNewByClass; 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRuleNewByClass20860); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleNewByClass"


    // $ANTLR start "ruleNewByClass"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:9146:1: ruleNewByClass returns [EObject current=null] : (otherlv_0= 'new' ( (otherlv_1= RULE_ID ) ) otherlv_2= '(' ( ( (lv_args_3_0= ruleExpression ) ) (otherlv_4= ',' ( (lv_args_5_0= ruleExpression ) ) )* )? otherlv_6= ')' ) ;
    public final EObject ruleNewByClass() throws RecognitionException {
        EObject current = null;

        Token otherlv_0=null;
        Token otherlv_1=null;
        Token otherlv_2=null;
        Token otherlv_4=null;
        Token otherlv_6=null;
        EObject lv_args_3_0 = null;

        EObject lv_args_5_0 = null;


         enterRule(); 
            
        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:9149:28: ( (otherlv_0= 'new' ( (otherlv_1= RULE_ID ) ) otherlv_2= '(' ( ( (lv_args_3_0= ruleExpression ) ) (otherlv_4= ',' ( (lv_args_5_0= ruleExpression ) ) )* )? otherlv_6= ')' ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:9150:1: (otherlv_0= 'new' ( (otherlv_1= RULE_ID ) ) otherlv_2= '(' ( ( (lv_args_3_0= ruleExpression ) ) (otherlv_4= ',' ( (lv_args_5_0= ruleExpression ) ) )* )? otherlv_6= ')' )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:9150:1: (otherlv_0= 'new' ( (otherlv_1= RULE_ID ) ) otherlv_2= '(' ( ( (lv_args_3_0= ruleExpression ) ) (otherlv_4= ',' ( (lv_args_5_0= ruleExpression ) ) )* )? otherlv_6= ')' )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:9150:3: otherlv_0= 'new' ( (otherlv_1= RULE_ID ) ) otherlv_2= '(' ( ( (lv_args_3_0= ruleExpression ) ) (otherlv_4= ',' ( (lv_args_5_0= ruleExpression ) ) )* )? otherlv_6= ')'
            {
            otherlv_0=(Token)match(input,145,FOLLOW_145_in_ruleNewByClass20897); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_0, grammarAccess.getNewByClassAccess().getNewKeyword_0());
                  
            }
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:9154:1: ( (otherlv_1= RULE_ID ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:9155:1: (otherlv_1= RULE_ID )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:9155:1: (otherlv_1= RULE_ID )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:9156:3: otherlv_1= RULE_ID
            {
            if ( state.backtracking==0 ) {

              			if (current==null) {
              	            current = createModelElement(grammarAccess.getNewByClassRule());
              	        }
                      
            }
            otherlv_1=(Token)match(input,RULE_ID,FOLLOW_RULE_ID_in_ruleNewByClass20917); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              		newLeafNode(otherlv_1, grammarAccess.getNewByClassAccess().getTypeClassCrossReference_1_0()); 
              	
            }

            }


            }

            otherlv_2=(Token)match(input,52,FOLLOW_52_in_ruleNewByClass20929); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_2, grammarAccess.getNewByClassAccess().getLeftParenthesisKeyword_2());
                  
            }
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:9171:1: ( ( (lv_args_3_0= ruleExpression ) ) (otherlv_4= ',' ( (lv_args_5_0= ruleExpression ) ) )* )?
            int alt117=2;
            int LA117_0 = input.LA(1);

            if ( (LA117_0==RULE_ID||(LA117_0>=RULE_FLOATING_POINT_LITERAL && LA117_0<=RULE_DECIMAL_LITERAL)||LA117_0==52||LA117_0==57||(LA117_0>=89 && LA117_0<=90)||(LA117_0>=94 && LA117_0<=97)||(LA117_0>=102 && LA117_0<=106)||(LA117_0>=109 && LA117_0<=137)||LA117_0==145) ) {
                alt117=1;
            }
            switch (alt117) {
                case 1 :
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:9171:2: ( (lv_args_3_0= ruleExpression ) ) (otherlv_4= ',' ( (lv_args_5_0= ruleExpression ) ) )*
                    {
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:9171:2: ( (lv_args_3_0= ruleExpression ) )
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:9172:1: (lv_args_3_0= ruleExpression )
                    {
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:9172:1: (lv_args_3_0= ruleExpression )
                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:9173:3: lv_args_3_0= ruleExpression
                    {
                    if ( state.backtracking==0 ) {
                       
                      	        newCompositeNode(grammarAccess.getNewByClassAccess().getArgsExpressionParserRuleCall_3_0_0()); 
                      	    
                    }
                    pushFollow(FOLLOW_ruleExpression_in_ruleNewByClass20951);
                    lv_args_3_0=ruleExpression();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      	        if (current==null) {
                      	            current = createModelElementForParent(grammarAccess.getNewByClassRule());
                      	        }
                             		add(
                             			current, 
                             			"args",
                              		lv_args_3_0, 
                              		"Expression");
                      	        afterParserOrEnumRuleCall();
                      	    
                    }

                    }


                    }

                    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:9189:2: (otherlv_4= ',' ( (lv_args_5_0= ruleExpression ) ) )*
                    loop116:
                    do {
                        int alt116=2;
                        int LA116_0 = input.LA(1);

                        if ( (LA116_0==53) ) {
                            alt116=1;
                        }


                        switch (alt116) {
                    	case 1 :
                    	    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:9189:4: otherlv_4= ',' ( (lv_args_5_0= ruleExpression ) )
                    	    {
                    	    otherlv_4=(Token)match(input,53,FOLLOW_53_in_ruleNewByClass20964); if (state.failed) return current;
                    	    if ( state.backtracking==0 ) {

                    	          	newLeafNode(otherlv_4, grammarAccess.getNewByClassAccess().getCommaKeyword_3_1_0());
                    	          
                    	    }
                    	    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:9193:1: ( (lv_args_5_0= ruleExpression ) )
                    	    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:9194:1: (lv_args_5_0= ruleExpression )
                    	    {
                    	    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:9194:1: (lv_args_5_0= ruleExpression )
                    	    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:9195:3: lv_args_5_0= ruleExpression
                    	    {
                    	    if ( state.backtracking==0 ) {
                    	       
                    	      	        newCompositeNode(grammarAccess.getNewByClassAccess().getArgsExpressionParserRuleCall_3_1_1_0()); 
                    	      	    
                    	    }
                    	    pushFollow(FOLLOW_ruleExpression_in_ruleNewByClass20985);
                    	    lv_args_5_0=ruleExpression();

                    	    state._fsp--;
                    	    if (state.failed) return current;
                    	    if ( state.backtracking==0 ) {

                    	      	        if (current==null) {
                    	      	            current = createModelElementForParent(grammarAccess.getNewByClassRule());
                    	      	        }
                    	             		add(
                    	             			current, 
                    	             			"args",
                    	              		lv_args_5_0, 
                    	              		"Expression");
                    	      	        afterParserOrEnumRuleCall();
                    	      	    
                    	    }

                    	    }


                    	    }


                    	    }
                    	    break;

                    	default :
                    	    break loop116;
                        }
                    } while (true);


                    }
                    break;

            }

            otherlv_6=(Token)match(input,54,FOLLOW_54_in_ruleNewByClass21001); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_6, grammarAccess.getNewByClassAccess().getRightParenthesisKeyword_4());
                  
            }

            }


            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleNewByClass"


    // $ANTLR start "entryRuleNewArray"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:9223:1: entryRuleNewArray returns [EObject current=null] : iv_ruleNewArray= ruleNewArray EOF ;
    public final EObject entryRuleNewArray() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleNewArray = null;


        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:9224:2: (iv_ruleNewArray= ruleNewArray EOF )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:9225:2: iv_ruleNewArray= ruleNewArray EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getNewArrayRule()); 
            }
            pushFollow(FOLLOW_ruleNewArray_in_entryRuleNewArray21037);
            iv_ruleNewArray=ruleNewArray();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleNewArray; 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRuleNewArray21047); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleNewArray"


    // $ANTLR start "ruleNewArray"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:9232:1: ruleNewArray returns [EObject current=null] : (otherlv_0= 'new' ( (lv_type_1_0= ruleUseType ) ) ( (lv_dime_2_0= ruleDimExpr ) )+ ) ;
    public final EObject ruleNewArray() throws RecognitionException {
        EObject current = null;

        Token otherlv_0=null;
        EObject lv_type_1_0 = null;

        EObject lv_dime_2_0 = null;


         enterRule(); 
            
        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:9235:28: ( (otherlv_0= 'new' ( (lv_type_1_0= ruleUseType ) ) ( (lv_dime_2_0= ruleDimExpr ) )+ ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:9236:1: (otherlv_0= 'new' ( (lv_type_1_0= ruleUseType ) ) ( (lv_dime_2_0= ruleDimExpr ) )+ )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:9236:1: (otherlv_0= 'new' ( (lv_type_1_0= ruleUseType ) ) ( (lv_dime_2_0= ruleDimExpr ) )+ )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:9236:3: otherlv_0= 'new' ( (lv_type_1_0= ruleUseType ) ) ( (lv_dime_2_0= ruleDimExpr ) )+
            {
            otherlv_0=(Token)match(input,145,FOLLOW_145_in_ruleNewArray21084); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_0, grammarAccess.getNewArrayAccess().getNewKeyword_0());
                  
            }
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:9240:1: ( (lv_type_1_0= ruleUseType ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:9241:1: (lv_type_1_0= ruleUseType )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:9241:1: (lv_type_1_0= ruleUseType )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:9242:3: lv_type_1_0= ruleUseType
            {
            if ( state.backtracking==0 ) {
               
              	        newCompositeNode(grammarAccess.getNewArrayAccess().getTypeUseTypeParserRuleCall_1_0()); 
              	    
            }
            pushFollow(FOLLOW_ruleUseType_in_ruleNewArray21105);
            lv_type_1_0=ruleUseType();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              	        if (current==null) {
              	            current = createModelElementForParent(grammarAccess.getNewArrayRule());
              	        }
                     		set(
                     			current, 
                     			"type",
                      		lv_type_1_0, 
                      		"UseType");
              	        afterParserOrEnumRuleCall();
              	    
            }

            }


            }

            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:9258:2: ( (lv_dime_2_0= ruleDimExpr ) )+
            int cnt118=0;
            loop118:
            do {
                int alt118=2;
                int LA118_0 = input.LA(1);

                if ( (LA118_0==57) ) {
                    alt118=1;
                }


                switch (alt118) {
            	case 1 :
            	    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:9259:1: (lv_dime_2_0= ruleDimExpr )
            	    {
            	    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:9259:1: (lv_dime_2_0= ruleDimExpr )
            	    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:9260:3: lv_dime_2_0= ruleDimExpr
            	    {
            	    if ( state.backtracking==0 ) {
            	       
            	      	        newCompositeNode(grammarAccess.getNewArrayAccess().getDimeDimExprParserRuleCall_2_0()); 
            	      	    
            	    }
            	    pushFollow(FOLLOW_ruleDimExpr_in_ruleNewArray21126);
            	    lv_dime_2_0=ruleDimExpr();

            	    state._fsp--;
            	    if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      	        if (current==null) {
            	      	            current = createModelElementForParent(grammarAccess.getNewArrayRule());
            	      	        }
            	             		add(
            	             			current, 
            	             			"dime",
            	              		lv_dime_2_0, 
            	              		"DimExpr");
            	      	        afterParserOrEnumRuleCall();
            	      	    
            	    }

            	    }


            	    }
            	    break;

            	default :
            	    if ( cnt118 >= 1 ) break loop118;
            	    if (state.backtracking>0) {state.failed=true; return current;}
                        EarlyExitException eee =
                            new EarlyExitException(118, input);
                        throw eee;
                }
                cnt118++;
            } while (true);


            }


            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleNewArray"


    // $ANTLR start "entryRuleDimExpr"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:9284:1: entryRuleDimExpr returns [EObject current=null] : iv_ruleDimExpr= ruleDimExpr EOF ;
    public final EObject entryRuleDimExpr() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleDimExpr = null;


        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:9285:2: (iv_ruleDimExpr= ruleDimExpr EOF )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:9286:2: iv_ruleDimExpr= ruleDimExpr EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getDimExprRule()); 
            }
            pushFollow(FOLLOW_ruleDimExpr_in_entryRuleDimExpr21163);
            iv_ruleDimExpr=ruleDimExpr();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleDimExpr; 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRuleDimExpr21173); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleDimExpr"


    // $ANTLR start "ruleDimExpr"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:9293:1: ruleDimExpr returns [EObject current=null] : ( () otherlv_1= '[' ( (lv_index_2_0= ruleExpression ) ) otherlv_3= ']' ) ;
    public final EObject ruleDimExpr() throws RecognitionException {
        EObject current = null;

        Token otherlv_1=null;
        Token otherlv_3=null;
        EObject lv_index_2_0 = null;


         enterRule(); 
            
        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:9296:28: ( ( () otherlv_1= '[' ( (lv_index_2_0= ruleExpression ) ) otherlv_3= ']' ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:9297:1: ( () otherlv_1= '[' ( (lv_index_2_0= ruleExpression ) ) otherlv_3= ']' )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:9297:1: ( () otherlv_1= '[' ( (lv_index_2_0= ruleExpression ) ) otherlv_3= ']' )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:9297:2: () otherlv_1= '[' ( (lv_index_2_0= ruleExpression ) ) otherlv_3= ']'
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:9297:2: ()
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:9298:5: 
            {
            if ( state.backtracking==0 ) {

                      current = forceCreateModelElement(
                          grammarAccess.getDimExprAccess().getDimexAction_0(),
                          current);
                  
            }

            }

            otherlv_1=(Token)match(input,57,FOLLOW_57_in_ruleDimExpr21219); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_1, grammarAccess.getDimExprAccess().getLeftSquareBracketKeyword_1());
                  
            }
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:9307:1: ( (lv_index_2_0= ruleExpression ) )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:9308:1: (lv_index_2_0= ruleExpression )
            {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:9308:1: (lv_index_2_0= ruleExpression )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:9309:3: lv_index_2_0= ruleExpression
            {
            if ( state.backtracking==0 ) {
               
              	        newCompositeNode(grammarAccess.getDimExprAccess().getIndexExpressionParserRuleCall_2_0()); 
              	    
            }
            pushFollow(FOLLOW_ruleExpression_in_ruleDimExpr21240);
            lv_index_2_0=ruleExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              	        if (current==null) {
              	            current = createModelElementForParent(grammarAccess.getDimExprRule());
              	        }
                     		set(
                     			current, 
                     			"index",
                      		lv_index_2_0, 
                      		"Expression");
              	        afterParserOrEnumRuleCall();
              	    
            }

            }


            }

            otherlv_3=(Token)match(input,58,FOLLOW_58_in_ruleDimExpr21252); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_3, grammarAccess.getDimExprAccess().getRightSquareBracketKeyword_3());
                  
            }

            }


            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleDimExpr"


    // $ANTLR start "entryRuleDim"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:9337:1: entryRuleDim returns [String current=null] : iv_ruleDim= ruleDim EOF ;
    public final String entryRuleDim() throws RecognitionException {
        String current = null;

        AntlrDatatypeRuleToken iv_ruleDim = null;


        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:9338:2: (iv_ruleDim= ruleDim EOF )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:9339:2: iv_ruleDim= ruleDim EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getDimRule()); 
            }
            pushFollow(FOLLOW_ruleDim_in_entryRuleDim21289);
            iv_ruleDim=ruleDim();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleDim.getText(); 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRuleDim21300); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleDim"


    // $ANTLR start "ruleDim"
    // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:9346:1: ruleDim returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : kw= '[]' ;
    public final AntlrDatatypeRuleToken ruleDim() throws RecognitionException {
        AntlrDatatypeRuleToken current = new AntlrDatatypeRuleToken();

        Token kw=null;

         enterRule(); 
            
        try {
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:9349:28: (kw= '[]' )
            // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:9351:2: kw= '[]'
            {
            kw=(Token)match(input,146,FOLLOW_146_in_ruleDim21337); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                      current.merge(kw);
                      newLeafNode(kw, grammarAccess.getDimAccess().getLeftSquareBracketRightSquareBracketKeyword()); 
                  
            }

            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleDim"

    // $ANTLR start synpred1_InternalApricot
    public final void synpred1_InternalApricot_fragment() throws RecognitionException {   
        // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:2756:3: ( ( ruleAssignmentOperator ) )
        // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:2757:1: ( ruleAssignmentOperator )
        {
        // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:2757:1: ( ruleAssignmentOperator )
        // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:2758:1: ruleAssignmentOperator
        {
        pushFollow(FOLLOW_ruleAssignmentOperator_in_synpred1_InternalApricot6510);
        ruleAssignmentOperator();

        state._fsp--;
        if (state.failed) return ;

        }


        }
    }
    // $ANTLR end synpred1_InternalApricot

    // $ANTLR start synpred2_InternalApricot
    public final void synpred2_InternalApricot_fragment() throws RecognitionException {   
        // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3738:7: ( ( ruleCastExpression ) )
        // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3739:1: ( ruleCastExpression )
        {
        // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3739:1: ( ruleCastExpression )
        // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3740:1: ruleCastExpression
        {
        pushFollow(FOLLOW_ruleCastExpression_in_synpred2_InternalApricot8746);
        ruleCastExpression();

        state._fsp--;
        if (state.failed) return ;

        }


        }
    }
    // $ANTLR end synpred2_InternalApricot

    // $ANTLR start synpred3_InternalApricot
    public final void synpred3_InternalApricot_fragment() throws RecognitionException {   
        // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3945:6: ( ( ruleIdentifierSuffix ) )
        // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3946:1: ( ruleIdentifierSuffix )
        {
        // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3946:1: ( ruleIdentifierSuffix )
        // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:3947:1: ruleIdentifierSuffix
        {
        pushFollow(FOLLOW_ruleIdentifierSuffix_in_synpred3_InternalApricot9093);
        ruleIdentifierSuffix();

        state._fsp--;
        if (state.failed) return ;

        }


        }
    }
    // $ANTLR end synpred3_InternalApricot

    // $ANTLR start synpred4_InternalApricot
    public final void synpred4_InternalApricot_fragment() throws RecognitionException {   
        // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4044:6: ( ( ruleIdentifierSuffix ) )
        // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4045:1: ( ruleIdentifierSuffix )
        {
        // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4045:1: ( ruleIdentifierSuffix )
        // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:4046:1: ruleIdentifierSuffix
        {
        pushFollow(FOLLOW_ruleIdentifierSuffix_in_synpred4_InternalApricot9236);
        ruleIdentifierSuffix();

        state._fsp--;
        if (state.failed) return ;

        }


        }
    }
    // $ANTLR end synpred4_InternalApricot

    // $ANTLR start synpred5_InternalApricot
    public final void synpred5_InternalApricot_fragment() throws RecognitionException {   
        // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7862:4: ( 'else' )
        // ../org.xtext.fofo.apricot/src-gen/org/xtext/fofo/parser/antlr/internal/InternalApricot.g:7862:6: 'else'
        {
        match(input,139,FOLLOW_139_in_synpred5_InternalApricot18080); if (state.failed) return ;

        }
    }
    // $ANTLR end synpred5_InternalApricot

    // Delegated rules

    public final boolean synpred2_InternalApricot() {
        state.backtracking++;
        int start = input.mark();
        try {
            synpred2_InternalApricot_fragment(); // can never throw exception
        } catch (RecognitionException re) {
            System.err.println("impossible: "+re);
        }
        boolean success = !state.failed;
        input.rewind(start);
        state.backtracking--;
        state.failed=false;
        return success;
    }
    public final boolean synpred1_InternalApricot() {
        state.backtracking++;
        int start = input.mark();
        try {
            synpred1_InternalApricot_fragment(); // can never throw exception
        } catch (RecognitionException re) {
            System.err.println("impossible: "+re);
        }
        boolean success = !state.failed;
        input.rewind(start);
        state.backtracking--;
        state.failed=false;
        return success;
    }
    public final boolean synpred5_InternalApricot() {
        state.backtracking++;
        int start = input.mark();
        try {
            synpred5_InternalApricot_fragment(); // can never throw exception
        } catch (RecognitionException re) {
            System.err.println("impossible: "+re);
        }
        boolean success = !state.failed;
        input.rewind(start);
        state.backtracking--;
        state.failed=false;
        return success;
    }
    public final boolean synpred3_InternalApricot() {
        state.backtracking++;
        int start = input.mark();
        try {
            synpred3_InternalApricot_fragment(); // can never throw exception
        } catch (RecognitionException re) {
            System.err.println("impossible: "+re);
        }
        boolean success = !state.failed;
        input.rewind(start);
        state.backtracking--;
        state.failed=false;
        return success;
    }
    public final boolean synpred4_InternalApricot() {
        state.backtracking++;
        int start = input.mark();
        try {
            synpred4_InternalApricot_fragment(); // can never throw exception
        } catch (RecognitionException re) {
            System.err.println("impossible: "+re);
        }
        boolean success = !state.failed;
        input.rewind(start);
        state.backtracking--;
        state.failed=false;
        return success;
    }


    protected DFA17 dfa17 = new DFA17(this);
    protected DFA33 dfa33 = new DFA33(this);
    protected DFA42 dfa42 = new DFA42(this);
    protected DFA58 dfa58 = new DFA58(this);
    protected DFA68 dfa68 = new DFA68(this);
    protected DFA94 dfa94 = new DFA94(this);
    static final String DFA17_eotS =
        "\30\uffff";
    static final String DFA17_eofS =
        "\30\uffff";
    static final String DFA17_minS =
        "\3\4\1\uffff\11\4\1\uffff\2\4\1\uffff\1\4\1\35\5\uffff";
    static final String DFA17_maxS =
        "\1\102\2\54\1\uffff\11\u0092\1\uffff\2\u0092\1\uffff\1\u0092\1"+
        "\64\5\uffff";
    static final String DFA17_acceptS =
        "\3\uffff\1\1\11\uffff\1\5\2\uffff\1\3\2\uffff\1\7\1\6\1\10\1\4"+
        "\1\2";
    static final String DFA17_specialS =
        "\30\uffff}>";
    static final String[] DFA17_transitionS = {
            "\1\4\34\uffff\1\1\1\2\1\3\1\uffff\1\5\1\6\1\7\1\10\1\11\1\12"+
            "\1\13\1\14\25\uffff\1\15",
            "\1\16\36\uffff\1\3\1\uffff\1\17\1\6\1\7\1\10\1\11\1\12\1\13"+
            "\1\14",
            "\1\16\36\uffff\1\3\1\uffff\1\17\1\6\1\7\1\10\1\11\1\12\1\13"+
            "\1\14",
            "",
            "\1\22\57\uffff\1\20\135\uffff\1\21",
            "\1\22\71\uffff\1\24\1\uffff\1\23\53\uffff\1\26\43\uffff\1"+
            "\25\1\uffff\1\21",
            "\1\22\u008d\uffff\1\21",
            "\1\22\u008d\uffff\1\21",
            "\1\22\u008d\uffff\1\21",
            "\1\22\u008d\uffff\1\21",
            "\1\22\u008d\uffff\1\21",
            "\1\22\u008d\uffff\1\21",
            "\1\22\u008d\uffff\1\21",
            "",
            "\1\22\u008d\uffff\1\21",
            "\1\22\u008d\uffff\1\21",
            "",
            "\1\22\u008d\uffff\1\21",
            "\1\3\25\uffff\1\3\1\27",
            "",
            "",
            "",
            "",
            ""
    };

    static final short[] DFA17_eot = DFA.unpackEncodedString(DFA17_eotS);
    static final short[] DFA17_eof = DFA.unpackEncodedString(DFA17_eofS);
    static final char[] DFA17_min = DFA.unpackEncodedStringToUnsignedChars(DFA17_minS);
    static final char[] DFA17_max = DFA.unpackEncodedStringToUnsignedChars(DFA17_maxS);
    static final short[] DFA17_accept = DFA.unpackEncodedString(DFA17_acceptS);
    static final short[] DFA17_special = DFA.unpackEncodedString(DFA17_specialS);
    static final short[][] DFA17_transition;

    static {
        int numStates = DFA17_transitionS.length;
        DFA17_transition = new short[numStates][];
        for (int i=0; i<numStates; i++) {
            DFA17_transition[i] = DFA.unpackEncodedString(DFA17_transitionS[i]);
        }
    }

    class DFA17 extends DFA {

        public DFA17(BaseRecognizer recognizer) {
            this.recognizer = recognizer;
            this.decisionNumber = 17;
            this.eot = DFA17_eot;
            this.eof = DFA17_eof;
            this.min = DFA17_min;
            this.max = DFA17_max;
            this.accept = DFA17_accept;
            this.special = DFA17_special;
            this.transition = DFA17_transition;
        }
        public String getDescription() {
            return "818:1: (this_Field_0= ruleField | this_Method_1= ruleMethod | this_ConstructorMethod_2= ruleConstructorMethod | this_ContinuousMethod_3= ruleContinuousMethod | this_InvariantBlock_4= ruleInvariantBlock | this_CompositionMethod_5= ruleCompositionMethod | this_DiscreteMethod_6= ruleDiscreteMethod | this_InitMethod_7= ruleInitMethod )";
        }
    }
    static final String DFA33_eotS =
        "\12\uffff";
    static final String DFA33_eofS =
        "\12\uffff";
    static final String DFA33_minS =
        "\3\4\5\uffff\1\4\1\uffff";
    static final String DFA33_maxS =
        "\1\54\1\u0090\1\54\5\uffff\1\77\1\uffff";
    static final String DFA33_acceptS =
        "\3\uffff\1\6\1\4\1\1\1\5\1\2\1\uffff\1\3";
    static final String DFA33_specialS =
        "\12\uffff}>";
    static final String[] DFA33_transitionS = {
            "\1\3\34\uffff\2\3\1\uffff\1\2\1\1\7\3",
            "\1\3\71\uffff\1\4\1\uffff\1\7\53\uffff\1\5\43\uffff\1\6",
            "\1\3\40\uffff\1\10\7\3",
            "",
            "",
            "",
            "",
            "",
            "\1\3\72\uffff\1\11",
            ""
    };

    static final short[] DFA33_eot = DFA.unpackEncodedString(DFA33_eotS);
    static final short[] DFA33_eof = DFA.unpackEncodedString(DFA33_eofS);
    static final char[] DFA33_min = DFA.unpackEncodedStringToUnsignedChars(DFA33_minS);
    static final char[] DFA33_max = DFA.unpackEncodedStringToUnsignedChars(DFA33_maxS);
    static final short[] DFA33_accept = DFA.unpackEncodedString(DFA33_acceptS);
    static final short[] DFA33_special = DFA.unpackEncodedString(DFA33_specialS);
    static final short[][] DFA33_transition;

    static {
        int numStates = DFA33_transitionS.length;
        DFA33_transition = new short[numStates][];
        for (int i=0; i<numStates; i++) {
            DFA33_transition[i] = DFA.unpackEncodedString(DFA33_transitionS[i]);
        }
    }

    class DFA33 extends DFA {

        public DFA33(BaseRecognizer recognizer) {
            this.recognizer = recognizer;
            this.decisionNumber = 33;
            this.eot = DFA33_eot;
            this.eof = DFA33_eof;
            this.min = DFA33_min;
            this.max = DFA33_max;
            this.accept = DFA33_accept;
            this.special = DFA33_special;
            this.transition = DFA33_transition;
        }
        public String getDescription() {
            return "1353:1: (this_AbstractContinuousMethod_0= ruleAbstractContinuousMethod | this_AbstractDiscreteMethod_1= ruleAbstractDiscreteMethod | this_NativeStartMethod_2= ruleNativeStartMethod | this_AbstractCompositionMethod_3= ruleAbstractCompositionMethod | this_AbstractInitMethod_4= ruleAbstractInitMethod | ( ( ruleModifier )? ( ruleBuiltInModifier )? ( (lv_type_7_0= ruleUseType ) ) ( (lv_name_8_0= RULE_ID ) ) otherlv_9= '(' ( ( (lv_params_10_0= ruleParameter ) ) (otherlv_11= ',' ( (lv_params_12_0= ruleParameter ) ) )* )? otherlv_13= ')' (otherlv_14= '{' ( (lv_body_15_0= ruleAbstractMethodBody ) ) otherlv_16= '}' )? otherlv_17= ';' ) )";
        }
    }
    static final String DFA42_eotS =
        "\14\uffff";
    static final String DFA42_eofS =
        "\1\12\13\uffff";
    static final String DFA42_minS =
        "\1\35\11\0\2\uffff";
    static final String DFA42_maxS =
        "\1\112\11\0\2\uffff";
    static final String DFA42_acceptS =
        "\12\uffff\1\2\1\1";
    static final String DFA42_specialS =
        "\1\uffff\1\1\1\0\1\3\1\2\1\6\1\7\1\4\1\5\1\10\2\uffff}>";
    static final String[] DFA42_transitionS = {
            "\1\12\22\uffff\1\12\2\uffff\1\1\1\uffff\2\12\3\uffff\2\12\7"+
            "\uffff\1\2\1\3\1\4\1\5\1\6\1\7\1\10\1\11",
            "\1\uffff",
            "\1\uffff",
            "\1\uffff",
            "\1\uffff",
            "\1\uffff",
            "\1\uffff",
            "\1\uffff",
            "\1\uffff",
            "\1\uffff",
            "",
            ""
    };

    static final short[] DFA42_eot = DFA.unpackEncodedString(DFA42_eotS);
    static final short[] DFA42_eof = DFA.unpackEncodedString(DFA42_eofS);
    static final char[] DFA42_min = DFA.unpackEncodedStringToUnsignedChars(DFA42_minS);
    static final char[] DFA42_max = DFA.unpackEncodedStringToUnsignedChars(DFA42_maxS);
    static final short[] DFA42_accept = DFA.unpackEncodedString(DFA42_acceptS);
    static final short[] DFA42_special = DFA.unpackEncodedString(DFA42_specialS);
    static final short[][] DFA42_transition;

    static {
        int numStates = DFA42_transitionS.length;
        DFA42_transition = new short[numStates][];
        for (int i=0; i<numStates; i++) {
            DFA42_transition[i] = DFA.unpackEncodedString(DFA42_transitionS[i]);
        }
    }

    class DFA42 extends DFA {

        public DFA42(BaseRecognizer recognizer) {
            this.recognizer = recognizer;
            this.decisionNumber = 42;
            this.eot = DFA42_eot;
            this.eof = DFA42_eof;
            this.min = DFA42_min;
            this.max = DFA42_max;
            this.accept = DFA42_accept;
            this.special = DFA42_special;
            this.transition = DFA42_transition;
        }
        public String getDescription() {
            return "2756:1: ( ( ( ( ruleAssignmentOperator ) )=> (lv_assignmentoperator_1_0= ruleAssignmentOperator ) ) ( (lv_expression_2_0= ruleExpression ) ) )?";
        }
        public int specialStateTransition(int s, IntStream _input) throws NoViableAltException {
            TokenStream input = (TokenStream)_input;
        	int _s = s;
            switch ( s ) {
                    case 0 : 
                        int LA42_2 = input.LA(1);

                         
                        int index42_2 = input.index();
                        input.rewind();
                        s = -1;
                        if ( (synpred1_InternalApricot()) ) {s = 11;}

                        else if ( (true) ) {s = 10;}

                         
                        input.seek(index42_2);
                        if ( s>=0 ) return s;
                        break;
                    case 1 : 
                        int LA42_1 = input.LA(1);

                         
                        int index42_1 = input.index();
                        input.rewind();
                        s = -1;
                        if ( (synpred1_InternalApricot()) ) {s = 11;}

                        else if ( (true) ) {s = 10;}

                         
                        input.seek(index42_1);
                        if ( s>=0 ) return s;
                        break;
                    case 2 : 
                        int LA42_4 = input.LA(1);

                         
                        int index42_4 = input.index();
                        input.rewind();
                        s = -1;
                        if ( (synpred1_InternalApricot()) ) {s = 11;}

                        else if ( (true) ) {s = 10;}

                         
                        input.seek(index42_4);
                        if ( s>=0 ) return s;
                        break;
                    case 3 : 
                        int LA42_3 = input.LA(1);

                         
                        int index42_3 = input.index();
                        input.rewind();
                        s = -1;
                        if ( (synpred1_InternalApricot()) ) {s = 11;}

                        else if ( (true) ) {s = 10;}

                         
                        input.seek(index42_3);
                        if ( s>=0 ) return s;
                        break;
                    case 4 : 
                        int LA42_7 = input.LA(1);

                         
                        int index42_7 = input.index();
                        input.rewind();
                        s = -1;
                        if ( (synpred1_InternalApricot()) ) {s = 11;}

                        else if ( (true) ) {s = 10;}

                         
                        input.seek(index42_7);
                        if ( s>=0 ) return s;
                        break;
                    case 5 : 
                        int LA42_8 = input.LA(1);

                         
                        int index42_8 = input.index();
                        input.rewind();
                        s = -1;
                        if ( (synpred1_InternalApricot()) ) {s = 11;}

                        else if ( (true) ) {s = 10;}

                         
                        input.seek(index42_8);
                        if ( s>=0 ) return s;
                        break;
                    case 6 : 
                        int LA42_5 = input.LA(1);

                         
                        int index42_5 = input.index();
                        input.rewind();
                        s = -1;
                        if ( (synpred1_InternalApricot()) ) {s = 11;}

                        else if ( (true) ) {s = 10;}

                         
                        input.seek(index42_5);
                        if ( s>=0 ) return s;
                        break;
                    case 7 : 
                        int LA42_6 = input.LA(1);

                         
                        int index42_6 = input.index();
                        input.rewind();
                        s = -1;
                        if ( (synpred1_InternalApricot()) ) {s = 11;}

                        else if ( (true) ) {s = 10;}

                         
                        input.seek(index42_6);
                        if ( s>=0 ) return s;
                        break;
                    case 8 : 
                        int LA42_9 = input.LA(1);

                         
                        int index42_9 = input.index();
                        input.rewind();
                        s = -1;
                        if ( (synpred1_InternalApricot()) ) {s = 11;}

                        else if ( (true) ) {s = 10;}

                         
                        input.seek(index42_9);
                        if ( s>=0 ) return s;
                        break;
            }
            if (state.backtracking>0) {state.failed=true; return -1;}
            NoViableAltException nvae =
                new NoViableAltException(getDescription(), 42, _s, input);
            error(nvae);
            throw nvae;
        }
    }
    static final String DFA58_eotS =
        "\57\uffff";
    static final String DFA58_eofS =
        "\57\uffff";
    static final String DFA58_minS =
        "\1\4\1\uffff\1\0\54\uffff";
    static final String DFA58_maxS =
        "\1\u0091\1\uffff\1\0\54\uffff";
    static final String DFA58_acceptS =
        "\1\uffff\1\1\1\uffff\1\3\14\uffff\1\4\35\uffff\1\2";
    static final String DFA58_specialS =
        "\2\uffff\1\0\54\uffff}>";
    static final String[] DFA58_transitionS = {
            "\1\3\4\uffff\6\3\45\uffff\1\2\53\uffff\1\1\1\3\4\uffff\4\3"+
            "\1\20\2\uffff\35\20\7\uffff\1\3",
            "",
            "\1\uffff",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            ""
    };

    static final short[] DFA58_eot = DFA.unpackEncodedString(DFA58_eotS);
    static final short[] DFA58_eof = DFA.unpackEncodedString(DFA58_eofS);
    static final char[] DFA58_min = DFA.unpackEncodedStringToUnsignedChars(DFA58_minS);
    static final char[] DFA58_max = DFA.unpackEncodedStringToUnsignedChars(DFA58_maxS);
    static final short[] DFA58_accept = DFA.unpackEncodedString(DFA58_acceptS);
    static final short[] DFA58_special = DFA.unpackEncodedString(DFA58_specialS);
    static final short[][] DFA58_transition;

    static {
        int numStates = DFA58_transitionS.length;
        DFA58_transition = new short[numStates][];
        for (int i=0; i<numStates; i++) {
            DFA58_transition[i] = DFA.unpackEncodedString(DFA58_transitionS[i]);
        }
    }

    class DFA58 extends DFA {

        public DFA58(BaseRecognizer recognizer) {
            this.recognizer = recognizer;
            this.decisionNumber = 58;
            this.eot = DFA58_eot;
            this.eof = DFA58_eof;
            this.min = DFA58_min;
            this.max = DFA58_max;
            this.accept = DFA58_accept;
            this.special = DFA58_special;
            this.transition = DFA58_transition;
        }
        public String getDescription() {
            return "3715:2: ( (otherlv_1= '!' ( (lv_unaryexpression_2_0= ruleUnaryExpression ) ) ) | ( ( ( ruleCastExpression ) )=> (lv_castexpression_3_0= ruleCastExpression ) ) | ( (lv_primary_4_0= rulePrimary ) ) | ( (lv_builtin_5_0= ruleBuilt_In_Methods ) ) )";
        }
        public int specialStateTransition(int s, IntStream _input) throws NoViableAltException {
            TokenStream input = (TokenStream)_input;
        	int _s = s;
            switch ( s ) {
                    case 0 : 
                        int LA58_2 = input.LA(1);

                         
                        int index58_2 = input.index();
                        input.rewind();
                        s = -1;
                        if ( (synpred2_InternalApricot()) ) {s = 46;}

                        else if ( (true) ) {s = 3;}

                         
                        input.seek(index58_2);
                        if ( s>=0 ) return s;
                        break;
            }
            if (state.backtracking>0) {state.failed=true; return -1;}
            NoViableAltException nvae =
                new NoViableAltException(getDescription(), 58, _s, input);
            error(nvae);
            throw nvae;
        }
    }
    static final String DFA68_eotS =
        "\14\uffff";
    static final String DFA68_eofS =
        "\14\uffff";
    static final String DFA68_minS =
        "\1\40\2\uffff\1\61\10\uffff";
    static final String DFA68_maxS =
        "\1\145\2\uffff\1\143\10\uffff";
    static final String DFA68_acceptS =
        "\1\uffff\1\1\1\2\1\uffff\1\11\1\12\1\10\1\7\1\4\1\3\1\6\1\5";
    static final String DFA68_specialS =
        "\14\uffff}>";
    static final String[] DFA68_transitionS = {
            "\1\3\23\uffff\1\2\4\uffff\1\1\52\uffff\1\4\1\5",
            "",
            "",
            "\1\11\14\uffff\1\7\1\6\41\uffff\1\10\1\13\1\12",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            ""
    };

    static final short[] DFA68_eot = DFA.unpackEncodedString(DFA68_eotS);
    static final short[] DFA68_eof = DFA.unpackEncodedString(DFA68_eofS);
    static final char[] DFA68_min = DFA.unpackEncodedStringToUnsignedChars(DFA68_minS);
    static final char[] DFA68_max = DFA.unpackEncodedStringToUnsignedChars(DFA68_maxS);
    static final short[] DFA68_accept = DFA.unpackEncodedString(DFA68_acceptS);
    static final short[] DFA68_special = DFA.unpackEncodedString(DFA68_specialS);
    static final short[][] DFA68_transition;

    static {
        int numStates = DFA68_transitionS.length;
        DFA68_transition = new short[numStates][];
        for (int i=0; i<numStates; i++) {
            DFA68_transition[i] = DFA.unpackEncodedString(DFA68_transitionS[i]);
        }
    }

    class DFA68 extends DFA {

        public DFA68(BaseRecognizer recognizer) {
            this.recognizer = recognizer;
            this.decisionNumber = 68;
            this.eot = DFA68_eot;
            this.eof = DFA68_eof;
            this.min = DFA68_min;
            this.max = DFA68_max;
            this.accept = DFA68_accept;
            this.special = DFA68_special;
            this.transition = DFA68_transition;
        }
        public String getDescription() {
            return "4093:2: ( ( (otherlv_1= '[' otherlv_2= ']' )+ otherlv_3= '.' otherlv_4= 'class' ) | ( (lv_arguments_5_0= ruleArguments ) ) | (otherlv_6= '.' otherlv_7= 'class' ) | (otherlv_8= '.' otherlv_9= 'this' ) | (otherlv_10= '.' otherlv_11= 'super' ( (lv_arguments_12_0= ruleArguments ) ) ) | (otherlv_13= '.' ( (lv_getvalue_14_0= 'at' ) ) ( (lv_arguments_15_0= ruleArguments ) ) ) | (otherlv_16= '.' otherlv_17= 'Composition' otherlv_18= '(' otherlv_19= ')' ) | (otherlv_20= '.' otherlv_21= 'Start' otherlv_22= '(' otherlv_23= ')' ) | otherlv_24= '(!)' | otherlv_25= '(?)' )";
        }
    }
    static final String DFA94_eotS =
        "\12\uffff";
    static final String DFA94_eofS =
        "\12\uffff";
    static final String DFA94_minS =
        "\1\4\11\uffff";
    static final String DFA94_maxS =
        "\1\u0091\11\uffff";
    static final String DFA94_acceptS =
        "\1\uffff\1\1\1\2\1\3\1\4\1\5\1\6\1\7\1\10\1\11";
    static final String DFA94_specialS =
        "\12\uffff}>";
    static final String[] DFA94_transitionS = {
            "\1\10\4\uffff\6\10\16\uffff\1\11\21\uffff\1\1\4\uffff\1\10"+
            "\2\uffff\1\7\1\uffff\1\10\37\uffff\2\10\3\uffff\4\10\4\uffff"+
            "\5\10\2\uffff\35\10\1\2\1\uffff\1\3\1\4\1\5\1\6\1\uffff\1\10",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            ""
    };

    static final short[] DFA94_eot = DFA.unpackEncodedString(DFA94_eotS);
    static final short[] DFA94_eof = DFA.unpackEncodedString(DFA94_eofS);
    static final char[] DFA94_min = DFA.unpackEncodedStringToUnsignedChars(DFA94_minS);
    static final char[] DFA94_max = DFA.unpackEncodedStringToUnsignedChars(DFA94_maxS);
    static final short[] DFA94_accept = DFA.unpackEncodedString(DFA94_acceptS);
    static final short[] DFA94_special = DFA.unpackEncodedString(DFA94_specialS);
    static final short[][] DFA94_transition;

    static {
        int numStates = DFA94_transitionS.length;
        DFA94_transition = new short[numStates][];
        for (int i=0; i<numStates; i++) {
            DFA94_transition[i] = DFA.unpackEncodedString(DFA94_transitionS[i]);
        }
    }

    class DFA94 extends DFA {

        public DFA94(BaseRecognizer recognizer) {
            this.recognizer = recognizer;
            this.decisionNumber = 94;
            this.eot = DFA94_eot;
            this.eof = DFA94_eof;
            this.min = DFA94_min;
            this.max = DFA94_max;
            this.accept = DFA94_accept;
            this.special = DFA94_special;
            this.transition = DFA94_transition;
        }
        public String getDescription() {
            return "7803:2: ( ( (lv_block_1_0= ruleBlock ) ) | (otherlv_2= 'if' ( (lv_parexpression_3_0= ruleParExpression ) ) ( (lv_ifstatement_4_0= ruleStatement ) ) ( ( ( 'else' )=>otherlv_5= 'else' ) ( (lv_elsestatement_6_0= ruleStatement ) ) )? ) | (otherlv_7= 'for' otherlv_8= '(' ( (lv_forcontrol_9_0= ruleForControl ) ) otherlv_10= ')' ( (lv_forstatement_11_0= ruleStatement ) ) ) | (otherlv_12= 'break' ( (lv_identifier_13_0= RULE_ID ) )? otherlv_14= ';' ) | (otherlv_15= 'continue' ( (lv_identifier_16_0= RULE_ID ) )? otherlv_17= ';' ) | (otherlv_18= 'while' ( (lv_parexpression_19_0= ruleParExpression ) ) ( (lv_whilestatement_20_0= ruleStatement ) ) ) | ( (lv_return_21_0= ruleReturnStatement ) ) | ( ( (lv_statementexpression_22_0= ruleExpression ) ) otherlv_23= ';' ) | otherlv_24= ';' )";
        }
    }
 

    public static final BitSet FOLLOW_rulePackageDeclaration_in_entryRulePackageDeclaration75 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRulePackageDeclaration85 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_28_in_rulePackageDeclaration122 = new BitSet(new long[]{0x0000000000000010L});
    public static final BitSet FOLLOW_ruleQualifiedName_in_rulePackageDeclaration143 = new BitSet(new long[]{0x0000000020000000L});
    public static final BitSet FOLLOW_29_in_rulePackageDeclaration155 = new BitSet(new long[]{0x0002200640000002L});
    public static final BitSet FOLLOW_ruleImport_in_rulePackageDeclaration176 = new BitSet(new long[]{0x0002200640000002L});
    public static final BitSet FOLLOW_ruleRefType_in_rulePackageDeclaration198 = new BitSet(new long[]{0x0002200600000002L});
    public static final BitSet FOLLOW_ruleImport_in_entryRuleImport235 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleImport245 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_30_in_ruleImport282 = new BitSet(new long[]{0x0000000000000010L});
    public static final BitSet FOLLOW_ruleQualifiedNameWithWildcard_in_ruleImport303 = new BitSet(new long[]{0x0000000020000000L});
    public static final BitSet FOLLOW_29_in_ruleImport315 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleQualifiedNameWithWildcard_in_entryRuleQualifiedNameWithWildcard352 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleQualifiedNameWithWildcard363 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleQualifiedName_in_ruleQualifiedNameWithWildcard410 = new BitSet(new long[]{0x0000000080000002L});
    public static final BitSet FOLLOW_31_in_ruleQualifiedNameWithWildcard429 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleQualifiedName_in_entryRuleQualifiedName472 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleQualifiedName483 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_RULE_ID_in_ruleQualifiedName523 = new BitSet(new long[]{0x0000000100000002L});
    public static final BitSet FOLLOW_32_in_ruleQualifiedName542 = new BitSet(new long[]{0x0000000000000010L});
    public static final BitSet FOLLOW_RULE_ID_in_ruleQualifiedName557 = new BitSet(new long[]{0x0000000100000002L});
    public static final BitSet FOLLOW_ruleModifier_in_entryRuleModifier605 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleModifier616 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_33_in_ruleModifier654 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_34_in_ruleModifier673 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleVARIABLE_MODIFIER_in_entryRuleVARIABLE_MODIFIER714 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleVARIABLE_MODIFIER725 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_35_in_ruleVARIABLE_MODIFIER762 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleBuiltInModifier_in_entryRuleBuiltInModifier802 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleBuiltInModifier813 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_36_in_ruleBuiltInModifier850 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleRefType_in_entryRuleRefType889 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleRefType899 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleClass_in_ruleRefType946 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleInterface_in_ruleRefType973 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleNonRefType_in_entryRuleNonRefType1008 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleNonRefType1018 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleBasicType_in_ruleNonRefType1065 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleMathType_in_ruleNonRefType1092 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleBasicType_in_entryRuleBasicType1127 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleBasicType1137 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_37_in_ruleBasicType1181 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_38_in_ruleBasicType1210 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_39_in_ruleBasicType1239 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_40_in_ruleBasicType1268 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_41_in_ruleBasicType1297 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_42_in_ruleBasicType1326 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleMathType_in_entryRuleMathType1377 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleMathType1387 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_43_in_ruleMathType1431 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_44_in_ruleMathType1460 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleInterface_in_entryRuleInterface1511 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleInterface1521 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleModifier_in_ruleInterface1563 = new BitSet(new long[]{0x0000200000000000L});
    public static final BitSet FOLLOW_45_in_ruleInterface1576 = new BitSet(new long[]{0x0000000000000010L});
    public static final BitSet FOLLOW_RULE_ID_in_ruleInterface1593 = new BitSet(new long[]{0x0000C00000000000L});
    public static final BitSet FOLLOW_46_in_ruleInterface1611 = new BitSet(new long[]{0x0000000000000010L});
    public static final BitSet FOLLOW_ruleQualifiedName_in_ruleInterface1634 = new BitSet(new long[]{0x0000800000000000L});
    public static final BitSet FOLLOW_47_in_ruleInterface1648 = new BitSet(new long[]{0x01011FF600000010L,0x0000000000000006L});
    public static final BitSet FOLLOW_ruleAbstractInterfaceElement_in_ruleInterface1669 = new BitSet(new long[]{0x01011FF600000010L,0x0000000000000006L});
    public static final BitSet FOLLOW_48_in_ruleInterface1682 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleClass_in_entryRuleClass1718 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleClass1728 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleModifier_in_ruleClass1770 = new BitSet(new long[]{0x0002000000000000L});
    public static final BitSet FOLLOW_49_in_ruleClass1783 = new BitSet(new long[]{0x0000000000000010L});
    public static final BitSet FOLLOW_RULE_ID_in_ruleClass1800 = new BitSet(new long[]{0x0004C00000000000L});
    public static final BitSet FOLLOW_46_in_ruleClass1818 = new BitSet(new long[]{0x0000000000000010L});
    public static final BitSet FOLLOW_ruleQualifiedName_in_ruleClass1841 = new BitSet(new long[]{0x0004800000000000L});
    public static final BitSet FOLLOW_50_in_ruleClass1856 = new BitSet(new long[]{0x0000000000000010L});
    public static final BitSet FOLLOW_ruleQualifiedName_in_ruleClass1879 = new BitSet(new long[]{0x0000800000000000L});
    public static final BitSet FOLLOW_47_in_ruleClass1893 = new BitSet(new long[]{0x00011FFE00000010L,0x0000000000000004L});
    public static final BitSet FOLLOW_ruleMember_in_ruleClass1914 = new BitSet(new long[]{0x00011FFE00000010L,0x0000000000000004L});
    public static final BitSet FOLLOW_48_in_ruleClass1927 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleMember_in_entryRuleMember1963 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleMember1973 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleField_in_ruleMember2020 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleMethod_in_ruleMember2047 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleConstructorMethod_in_ruleMember2074 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleContinuousMethod_in_ruleMember2101 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleInvariantBlock_in_ruleMember2128 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleCompositionMethod_in_ruleMember2155 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleDiscreteMethod_in_ruleMember2182 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleInitMethod_in_ruleMember2209 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleFieldName_in_entryRuleFieldName2245 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleFieldName2256 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_RULE_ID_in_ruleFieldName2295 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleField_in_entryRuleField2339 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleField2349 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleModifier_in_ruleField2395 = new BitSet(new long[]{0x00001FFE00000010L});
    public static final BitSet FOLLOW_ruleVARIABLE_MODIFIER_in_ruleField2417 = new BitSet(new long[]{0x00001FF600000010L});
    public static final BitSet FOLLOW_ruleUseType_in_ruleField2439 = new BitSet(new long[]{0x0000000000000010L,0x0000000000000000L,0x0000000000040000L});
    public static final BitSet FOLLOW_ruleDim_in_ruleField2460 = new BitSet(new long[]{0x0000000000000010L,0x0000000000000000L,0x0000000000040000L});
    public static final BitSet FOLLOW_ruleFieldName_in_ruleField2482 = new BitSet(new long[]{0x0008000020000000L});
    public static final BitSet FOLLOW_51_in_ruleField2495 = new BitSet(new long[]{0x0210800000007E10L,0xFFFFE7C3C6000000L,0x00000000000203FFL});
    public static final BitSet FOLLOW_ruleVariableInitializer_in_ruleField2516 = new BitSet(new long[]{0x0000000020000000L});
    public static final BitSet FOLLOW_29_in_ruleField2530 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleConstructorMethod_in_entryRuleConstructorMethod2566 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleConstructorMethod2576 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_RULE_ID_in_ruleConstructorMethod2618 = new BitSet(new long[]{0x0010000000000000L});
    public static final BitSet FOLLOW_52_in_ruleConstructorMethod2635 = new BitSet(new long[]{0x00401FF600000010L});
    public static final BitSet FOLLOW_ruleParameter_in_ruleConstructorMethod2657 = new BitSet(new long[]{0x0060000000000000L});
    public static final BitSet FOLLOW_53_in_ruleConstructorMethod2670 = new BitSet(new long[]{0x00001FF600000010L});
    public static final BitSet FOLLOW_ruleParameter_in_ruleConstructorMethod2691 = new BitSet(new long[]{0x0060000000000000L});
    public static final BitSet FOLLOW_54_in_ruleConstructorMethod2707 = new BitSet(new long[]{0x0000800000000000L});
    public static final BitSet FOLLOW_47_in_ruleConstructorMethod2719 = new BitSet(new long[]{0x02919FFE20007E10L,0xFFFFE7C3C6000000L,0x000000000002F7FFL});
    public static final BitSet FOLLOW_ruleMethodBody_in_ruleConstructorMethod2740 = new BitSet(new long[]{0x0001000000000000L});
    public static final BitSet FOLLOW_48_in_ruleConstructorMethod2752 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleMethod_in_entryRuleMethod2788 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleMethod2798 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleModifier_in_ruleMethod2840 = new BitSet(new long[]{0x00001FF600000010L});
    public static final BitSet FOLLOW_ruleUseType_in_ruleMethod2862 = new BitSet(new long[]{0x0000000000000010L,0x0000000000000000L,0x0000000000040000L});
    public static final BitSet FOLLOW_ruleDim_in_ruleMethod2883 = new BitSet(new long[]{0x0000000000000010L,0x0000000000000000L,0x0000000000040000L});
    public static final BitSet FOLLOW_RULE_ID_in_ruleMethod2901 = new BitSet(new long[]{0x0010000000000000L});
    public static final BitSet FOLLOW_52_in_ruleMethod2918 = new BitSet(new long[]{0x00401FF600000010L});
    public static final BitSet FOLLOW_ruleParameter_in_ruleMethod2940 = new BitSet(new long[]{0x0060000000000000L});
    public static final BitSet FOLLOW_53_in_ruleMethod2953 = new BitSet(new long[]{0x00001FF600000010L});
    public static final BitSet FOLLOW_ruleParameter_in_ruleMethod2974 = new BitSet(new long[]{0x0060000000000000L});
    public static final BitSet FOLLOW_54_in_ruleMethod2990 = new BitSet(new long[]{0x0000800000000000L});
    public static final BitSet FOLLOW_47_in_ruleMethod3002 = new BitSet(new long[]{0x02919FFE20007E10L,0xFFFFE7C3C6000000L,0x000000000002F7FFL});
    public static final BitSet FOLLOW_ruleMethodBody_in_ruleMethod3023 = new BitSet(new long[]{0x0001000000000000L});
    public static final BitSet FOLLOW_48_in_ruleMethod3035 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleAbstractMethod_in_entryRuleAbstractMethod3071 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleAbstractMethod3081 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleAbstractContinuousMethod_in_ruleAbstractMethod3128 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleAbstractDiscreteMethod_in_ruleAbstractMethod3155 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleNativeStartMethod_in_ruleAbstractMethod3182 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleAbstractCompositionMethod_in_ruleAbstractMethod3209 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleAbstractInitMethod_in_ruleAbstractMethod3236 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleModifier_in_ruleAbstractMethod3259 = new BitSet(new long[]{0x00001FF600000010L});
    public static final BitSet FOLLOW_ruleBuiltInModifier_in_ruleAbstractMethod3277 = new BitSet(new long[]{0x00001FF600000010L});
    public static final BitSet FOLLOW_ruleUseType_in_ruleAbstractMethod3299 = new BitSet(new long[]{0x0000000000000010L});
    public static final BitSet FOLLOW_RULE_ID_in_ruleAbstractMethod3316 = new BitSet(new long[]{0x0010000000000000L});
    public static final BitSet FOLLOW_52_in_ruleAbstractMethod3333 = new BitSet(new long[]{0x00401FF600000010L});
    public static final BitSet FOLLOW_ruleParameter_in_ruleAbstractMethod3355 = new BitSet(new long[]{0x0060000000000000L});
    public static final BitSet FOLLOW_53_in_ruleAbstractMethod3368 = new BitSet(new long[]{0x00001FF600000010L});
    public static final BitSet FOLLOW_ruleParameter_in_ruleAbstractMethod3389 = new BitSet(new long[]{0x0060000000000000L});
    public static final BitSet FOLLOW_54_in_ruleAbstractMethod3405 = new BitSet(new long[]{0x0000800020000000L});
    public static final BitSet FOLLOW_47_in_ruleAbstractMethod3418 = new BitSet(new long[]{0x0100000000000000L});
    public static final BitSet FOLLOW_ruleAbstractMethodBody_in_ruleAbstractMethod3439 = new BitSet(new long[]{0x0001000000000000L});
    public static final BitSet FOLLOW_48_in_ruleAbstractMethod3451 = new BitSet(new long[]{0x0000000020000000L});
    public static final BitSet FOLLOW_29_in_ruleAbstractMethod3465 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleUseType_in_entryRuleUseType3502 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleUseType3512 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_RULE_ID_in_ruleUseType3557 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleNonRefType_in_ruleUseType3584 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleParameter_in_entryRuleParameter3620 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleParameter3630 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleUseType_in_ruleParameter3676 = new BitSet(new long[]{0x0000000000000010L,0x0000000000000000L,0x0000000000040000L});
    public static final BitSet FOLLOW_ruleDim_in_ruleParameter3697 = new BitSet(new long[]{0x0000000000000010L,0x0000000000000000L,0x0000000000040000L});
    public static final BitSet FOLLOW_RULE_ID_in_ruleParameter3715 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleMethodBody_in_entryRuleMethodBody3758 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleMethodBody3768 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleBlockStatement_in_ruleMethodBody3823 = new BitSet(new long[]{0x02909FFE20007E12L,0xFFFFE7C3C6000000L,0x000000000002F7FFL});
    public static final BitSet FOLLOW_ruleAbstractMethodBody_in_entryRuleAbstractMethodBody3860 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleAbstractMethodBody3870 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleRequiresAbstractComposition_in_ruleAbstractMethodBody3916 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleLocalVarName_in_entryRuleLocalVarName3951 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleLocalVarName3962 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_RULE_ID_in_ruleLocalVarName4001 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleVariableInitializer_in_entryRuleVariableInitializer4045 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleVariableInitializer4055 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleExpression_in_ruleVariableInitializer4102 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_47_in_ruleVariableInitializer4120 = new BitSet(new long[]{0x0210000000007E10L,0xFFFFE7C3C6000000L,0x00000000000203FFL});
    public static final BitSet FOLLOW_ruleExpressionList_in_ruleVariableInitializer4142 = new BitSet(new long[]{0x0001000000000000L});
    public static final BitSet FOLLOW_48_in_ruleVariableInitializer4153 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleReturnStatement_in_entryRuleReturnStatement4190 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleReturnStatement4200 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_55_in_ruleReturnStatement4237 = new BitSet(new long[]{0x0210000000007E10L,0xFFFFE7C3C6000000L,0x00000000000203FFL});
    public static final BitSet FOLLOW_ruleExpression_in_ruleReturnStatement4258 = new BitSet(new long[]{0x0000000020000000L});
    public static final BitSet FOLLOW_29_in_ruleReturnStatement4270 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleAMOUNT_in_entryRuleAMOUNT4307 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleAMOUNT4318 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_RULE_AMOUNT_GEONE_in_ruleAMOUNT4358 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_RULE_AMOUNT_ONE_OR_ZERO_in_ruleAMOUNT4384 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleAbstractInterfaceElement_in_entryRuleAbstractInterfaceElement4429 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleAbstractInterfaceElement4439 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleAbstractMethod_in_ruleAbstractInterfaceElement4486 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleRequires_in_ruleAbstractInterfaceElement4513 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleClockConstraint_in_ruleAbstractInterfaceElement4540 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleAbstractInvariant_in_ruleAbstractInterfaceElement4567 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleRequires_in_entryRuleRequires4602 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleRequires4612 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_56_in_ruleRequires4649 = new BitSet(new long[]{0x0000000000000010L});
    public static final BitSet FOLLOW_RULE_ID_in_ruleRequires4666 = new BitSet(new long[]{0x0200000000000000L});
    public static final BitSet FOLLOW_57_in_ruleRequires4683 = new BitSet(new long[]{0x0000000000000060L});
    public static final BitSet FOLLOW_ruleAMOUNT_in_ruleRequires4699 = new BitSet(new long[]{0x0400000000000000L});
    public static final BitSet FOLLOW_58_in_ruleRequires4710 = new BitSet(new long[]{0x0800000000000000L});
    public static final BitSet FOLLOW_59_in_ruleRequires4722 = new BitSet(new long[]{0x00001FF600000010L});
    public static final BitSet FOLLOW_ruleUseType_in_ruleRequires4743 = new BitSet(new long[]{0x0000000020000000L});
    public static final BitSet FOLLOW_29_in_ruleRequires4755 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleAbstractDynamicSwitch_in_entryRuleAbstractDynamicSwitch4791 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleAbstractDynamicSwitch4801 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_52_in_ruleAbstractDynamicSwitch4838 = new BitSet(new long[]{0x0000000000000010L});
    public static final BitSet FOLLOW_RULE_ID_in_ruleAbstractDynamicSwitch4855 = new BitSet(new long[]{0x0200000000000000L});
    public static final BitSet FOLLOW_57_in_ruleAbstractDynamicSwitch4872 = new BitSet(new long[]{0x0000000000000060L});
    public static final BitSet FOLLOW_ruleAMOUNT_in_ruleAbstractDynamicSwitch4888 = new BitSet(new long[]{0x0400000000000000L});
    public static final BitSet FOLLOW_58_in_ruleAbstractDynamicSwitch4899 = new BitSet(new long[]{0x0800000000000000L});
    public static final BitSet FOLLOW_59_in_ruleAbstractDynamicSwitch4911 = new BitSet(new long[]{0x0000000000000010L});
    public static final BitSet FOLLOW_RULE_ID_in_ruleAbstractDynamicSwitch4931 = new BitSet(new long[]{0x1020000000000000L});
    public static final BitSet FOLLOW_60_in_ruleAbstractDynamicSwitch4944 = new BitSet(new long[]{0x0000000000000010L});
    public static final BitSet FOLLOW_RULE_ID_in_ruleAbstractDynamicSwitch4964 = new BitSet(new long[]{0x0020000000000000L});
    public static final BitSet FOLLOW_53_in_ruleAbstractDynamicSwitch4978 = new BitSet(new long[]{0x0000000000000010L});
    public static final BitSet FOLLOW_RULE_ID_in_ruleAbstractDynamicSwitch4995 = new BitSet(new long[]{0x0200000000000000L});
    public static final BitSet FOLLOW_57_in_ruleAbstractDynamicSwitch5012 = new BitSet(new long[]{0x0000000000000060L});
    public static final BitSet FOLLOW_ruleAMOUNT_in_ruleAbstractDynamicSwitch5028 = new BitSet(new long[]{0x0400000000000000L});
    public static final BitSet FOLLOW_58_in_ruleAbstractDynamicSwitch5039 = new BitSet(new long[]{0x0800000000000000L});
    public static final BitSet FOLLOW_59_in_ruleAbstractDynamicSwitch5051 = new BitSet(new long[]{0x0000000000000010L});
    public static final BitSet FOLLOW_RULE_ID_in_ruleAbstractDynamicSwitch5071 = new BitSet(new long[]{0x0020000000000000L});
    public static final BitSet FOLLOW_53_in_ruleAbstractDynamicSwitch5083 = new BitSet(new long[]{0x0000000000000010L});
    public static final BitSet FOLLOW_RULE_ID_in_ruleAbstractDynamicSwitch5100 = new BitSet(new long[]{0x0200000000000000L});
    public static final BitSet FOLLOW_57_in_ruleAbstractDynamicSwitch5117 = new BitSet(new long[]{0x0000000000000060L});
    public static final BitSet FOLLOW_ruleAMOUNT_in_ruleAbstractDynamicSwitch5133 = new BitSet(new long[]{0x0400000000000000L});
    public static final BitSet FOLLOW_58_in_ruleAbstractDynamicSwitch5144 = new BitSet(new long[]{0x0800000000000000L});
    public static final BitSet FOLLOW_59_in_ruleAbstractDynamicSwitch5156 = new BitSet(new long[]{0x0000000000000010L});
    public static final BitSet FOLLOW_RULE_ID_in_ruleAbstractDynamicSwitch5176 = new BitSet(new long[]{0x1040000000000000L});
    public static final BitSet FOLLOW_60_in_ruleAbstractDynamicSwitch5189 = new BitSet(new long[]{0x0000000000000010L});
    public static final BitSet FOLLOW_RULE_ID_in_ruleAbstractDynamicSwitch5209 = new BitSet(new long[]{0x0040000000000000L});
    public static final BitSet FOLLOW_54_in_ruleAbstractDynamicSwitch5223 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleABSTRACT_CONDTION_in_entryRuleABSTRACT_CONDTION5260 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleABSTRACT_CONDTION5271 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_61_in_ruleABSTRACT_CONDTION5309 = new BitSet(new long[]{0x0000800000000000L});
    public static final BitSet FOLLOW_47_in_ruleABSTRACT_CONDTION5322 = new BitSet(new long[]{0x0001000000000000L});
    public static final BitSet FOLLOW_48_in_ruleABSTRACT_CONDTION5335 = new BitSet(new long[]{0x0000000020000000L});
    public static final BitSet FOLLOW_29_in_ruleABSTRACT_CONDTION5348 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleAbstractCompositionMethod_in_entryRuleAbstractCompositionMethod5388 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleAbstractCompositionMethod5398 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_37_in_ruleAbstractCompositionMethod5435 = new BitSet(new long[]{0x4000000000000000L});
    public static final BitSet FOLLOW_62_in_ruleAbstractCompositionMethod5453 = new BitSet(new long[]{0x0010000000000000L});
    public static final BitSet FOLLOW_52_in_ruleAbstractCompositionMethod5478 = new BitSet(new long[]{0x0040000000000000L});
    public static final BitSet FOLLOW_54_in_ruleAbstractCompositionMethod5490 = new BitSet(new long[]{0x0000800000000000L});
    public static final BitSet FOLLOW_47_in_ruleAbstractCompositionMethod5502 = new BitSet(new long[]{0x0100000000000000L});
    public static final BitSet FOLLOW_ruleRequiresAbstractComposition_in_ruleAbstractCompositionMethod5523 = new BitSet(new long[]{0x0001000000000000L});
    public static final BitSet FOLLOW_48_in_ruleAbstractCompositionMethod5535 = new BitSet(new long[]{0x0000000020000000L});
    public static final BitSet FOLLOW_29_in_ruleAbstractCompositionMethod5547 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleNativeStartMethod_in_entryRuleNativeStartMethod5583 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleNativeStartMethod5593 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_36_in_ruleNativeStartMethod5630 = new BitSet(new long[]{0x0000002000000000L});
    public static final BitSet FOLLOW_37_in_ruleNativeStartMethod5642 = new BitSet(new long[]{0x8000000000000000L});
    public static final BitSet FOLLOW_63_in_ruleNativeStartMethod5660 = new BitSet(new long[]{0x0010000000000000L});
    public static final BitSet FOLLOW_52_in_ruleNativeStartMethod5685 = new BitSet(new long[]{0x0040000000000000L});
    public static final BitSet FOLLOW_54_in_ruleNativeStartMethod5697 = new BitSet(new long[]{0x0000000020000000L});
    public static final BitSet FOLLOW_29_in_ruleNativeStartMethod5709 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleRequiresAbstractComposition_in_entryRuleRequiresAbstractComposition5745 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleRequiresAbstractComposition5755 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_56_in_ruleRequiresAbstractComposition5792 = new BitSet(new long[]{0x0000000000000010L});
    public static final BitSet FOLLOW_RULE_ID_in_ruleRequiresAbstractComposition5809 = new BitSet(new long[]{0x0200000000000000L});
    public static final BitSet FOLLOW_57_in_ruleRequiresAbstractComposition5826 = new BitSet(new long[]{0x0000000000000060L});
    public static final BitSet FOLLOW_ruleAMOUNT_in_ruleRequiresAbstractComposition5842 = new BitSet(new long[]{0x0400000000000000L});
    public static final BitSet FOLLOW_58_in_ruleRequiresAbstractComposition5853 = new BitSet(new long[]{0x0000000000000080L});
    public static final BitSet FOLLOW_RULE_ASYACTIONS_in_ruleRequiresAbstractComposition5864 = new BitSet(new long[]{0x0200000000000000L});
    public static final BitSet FOLLOW_57_in_ruleRequiresAbstractComposition5875 = new BitSet(new long[]{0x0000000000000060L});
    public static final BitSet FOLLOW_ruleAMOUNT_in_ruleRequiresAbstractComposition5891 = new BitSet(new long[]{0x0400000000000000L});
    public static final BitSet FOLLOW_58_in_ruleRequiresAbstractComposition5902 = new BitSet(new long[]{0x0800000000000000L});
    public static final BitSet FOLLOW_59_in_ruleRequiresAbstractComposition5914 = new BitSet(new long[]{0x0010000000000000L});
    public static final BitSet FOLLOW_ruleAbstractDynamicSwitch_in_ruleRequiresAbstractComposition5935 = new BitSet(new long[]{0x0000800000000000L});
    public static final BitSet FOLLOW_47_in_ruleRequiresAbstractComposition5947 = new BitSet(new long[]{0x2000000000000000L});
    public static final BitSet FOLLOW_ruleABSTRACT_CONDTION_in_ruleRequiresAbstractComposition5963 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000001L});
    public static final BitSet FOLLOW_ruleABSTRACT_DISCRETE_in_ruleRequiresAbstractComposition5978 = new BitSet(new long[]{0x0001000000000000L});
    public static final BitSet FOLLOW_48_in_ruleRequiresAbstractComposition5989 = new BitSet(new long[]{0x0000000020000000L});
    public static final BitSet FOLLOW_29_in_ruleRequiresAbstractComposition6001 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleABSTRACT_DISCRETE_in_entryRuleABSTRACT_DISCRETE6038 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleABSTRACT_DISCRETE6049 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_64_in_ruleABSTRACT_DISCRETE6087 = new BitSet(new long[]{0x0000800000000000L});
    public static final BitSet FOLLOW_47_in_ruleABSTRACT_DISCRETE6100 = new BitSet(new long[]{0x0001000000000000L});
    public static final BitSet FOLLOW_48_in_ruleABSTRACT_DISCRETE6113 = new BitSet(new long[]{0x0000000020000000L});
    public static final BitSet FOLLOW_29_in_ruleABSTRACT_DISCRETE6126 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleClockConstraint_in_entryRuleClockConstraint6166 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleClockConstraint6176 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_65_in_ruleClockConstraint6222 = new BitSet(new long[]{0x0000000000000100L});
    public static final BitSet FOLLOW_RULE_CLOCK_in_ruleClockConstraint6239 = new BitSet(new long[]{0x0000000020000000L});
    public static final BitSet FOLLOW_29_in_ruleClockConstraint6256 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleAbstractInvariant_in_entryRuleAbstractInvariant6292 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleAbstractInvariant6302 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_66_in_ruleAbstractInvariant6354 = new BitSet(new long[]{0x0000800000000000L});
    public static final BitSet FOLLOW_47_in_ruleAbstractInvariant6379 = new BitSet(new long[]{0x0001000000000000L});
    public static final BitSet FOLLOW_48_in_ruleAbstractInvariant6391 = new BitSet(new long[]{0x0000000020000000L});
    public static final BitSet FOLLOW_29_in_ruleAbstractInvariant6403 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleExpression_in_entryRuleExpression6439 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleExpression6449 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleConditionalExpression_in_ruleExpression6496 = new BitSet(new long[]{0x0008000000000002L,0x00000000000007F8L});
    public static final BitSet FOLLOW_ruleAssignmentOperator_in_ruleExpression6527 = new BitSet(new long[]{0x0210000000007E10L,0xFFFFE7C3C6000000L,0x00000000000203FFL});
    public static final BitSet FOLLOW_ruleExpression_in_ruleExpression6548 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleAssignmentOperator_in_entryRuleAssignmentOperator6587 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleAssignmentOperator6598 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_51_in_ruleAssignmentOperator6636 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_67_in_ruleAssignmentOperator6655 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_68_in_ruleAssignmentOperator6674 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_69_in_ruleAssignmentOperator6693 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_70_in_ruleAssignmentOperator6712 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_71_in_ruleAssignmentOperator6731 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_72_in_ruleAssignmentOperator6750 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_73_in_ruleAssignmentOperator6769 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_74_in_ruleAssignmentOperator6788 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleConditionalExpression_in_entryRuleConditionalExpression6828 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleConditionalExpression6838 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleConditionalOrExpression_in_ruleConditionalExpression6884 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000800L});
    public static final BitSet FOLLOW_75_in_ruleConditionalExpression6897 = new BitSet(new long[]{0x0210000000007E10L,0xFFFFE7C3C6000000L,0x00000000000203FFL});
    public static final BitSet FOLLOW_ruleExpression_in_ruleConditionalExpression6918 = new BitSet(new long[]{0x0800000000000000L});
    public static final BitSet FOLLOW_59_in_ruleConditionalExpression6930 = new BitSet(new long[]{0x0210000000007E10L,0xFFFFE7C3C6000000L,0x00000000000203FFL});
    public static final BitSet FOLLOW_ruleExpression_in_ruleConditionalExpression6951 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleConditionalOrExpression_in_entryRuleConditionalOrExpression6989 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleConditionalOrExpression6999 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleConditionalAndExpression_in_ruleConditionalOrExpression7045 = new BitSet(new long[]{0x0000000000000002L,0x0000000000001000L});
    public static final BitSet FOLLOW_76_in_ruleConditionalOrExpression7058 = new BitSet(new long[]{0x0210000000007E10L,0xFFFFE7C3C6000000L,0x00000000000203FFL});
    public static final BitSet FOLLOW_ruleConditionalAndExpression_in_ruleConditionalOrExpression7079 = new BitSet(new long[]{0x0000000000000002L,0x0000000000001000L});
    public static final BitSet FOLLOW_ruleConditionalAndExpression_in_entryRuleConditionalAndExpression7117 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleConditionalAndExpression7127 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleExclusiveOrExpression_in_ruleConditionalAndExpression7173 = new BitSet(new long[]{0x0000000000000002L,0x0000000000002000L});
    public static final BitSet FOLLOW_77_in_ruleConditionalAndExpression7186 = new BitSet(new long[]{0x0210000000007E10L,0xFFFFE7C3C6000000L,0x00000000000203FFL});
    public static final BitSet FOLLOW_ruleExclusiveOrExpression_in_ruleConditionalAndExpression7207 = new BitSet(new long[]{0x0000000000000002L,0x0000000000002000L});
    public static final BitSet FOLLOW_ruleExclusiveOrExpression_in_entryRuleExclusiveOrExpression7245 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleExclusiveOrExpression7255 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleEqualityExpression_in_ruleExclusiveOrExpression7301 = new BitSet(new long[]{0x0000000000000002L,0x0000000000004000L});
    public static final BitSet FOLLOW_78_in_ruleExclusiveOrExpression7314 = new BitSet(new long[]{0x0210000000007E10L,0xFFFFE7C3C6000000L,0x00000000000203FFL});
    public static final BitSet FOLLOW_ruleEqualityExpression_in_ruleExclusiveOrExpression7335 = new BitSet(new long[]{0x0000000000000002L,0x0000000000004000L});
    public static final BitSet FOLLOW_ruleEqualityExpression_in_entryRuleEqualityExpression7373 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleEqualityExpression7383 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleInstanceOfExpression_in_ruleEqualityExpression7429 = new BitSet(new long[]{0x0000000000000002L,0x0000000000018000L});
    public static final BitSet FOLLOW_79_in_ruleEqualityExpression7443 = new BitSet(new long[]{0x0210000000007E10L,0xFFFFE7C3C6000000L,0x00000000000203FFL});
    public static final BitSet FOLLOW_80_in_ruleEqualityExpression7461 = new BitSet(new long[]{0x0210000000007E10L,0xFFFFE7C3C6000000L,0x00000000000203FFL});
    public static final BitSet FOLLOW_ruleInstanceOfExpression_in_ruleEqualityExpression7483 = new BitSet(new long[]{0x0000000000000002L,0x0000000000018000L});
    public static final BitSet FOLLOW_ruleInstanceOfExpression_in_entryRuleInstanceOfExpression7521 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleInstanceOfExpression7531 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleRelationalExpression_in_ruleInstanceOfExpression7577 = new BitSet(new long[]{0x0000000000000002L,0x0000000000020000L});
    public static final BitSet FOLLOW_81_in_ruleInstanceOfExpression7590 = new BitSet(new long[]{0x00001FF600000010L});
    public static final BitSet FOLLOW_ruleUseType_in_ruleInstanceOfExpression7611 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleRelationalExpression_in_entryRuleRelationalExpression7649 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleRelationalExpression7659 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleAdditiveExpression_in_ruleRelationalExpression7705 = new BitSet(new long[]{0x0000000000000002L,0x0000000001FC0000L});
    public static final BitSet FOLLOW_ruleRelationalOp_in_ruleRelationalExpression7727 = new BitSet(new long[]{0x0210000000007E10L,0xFFFFE7C3C6000000L,0x00000000000203FFL});
    public static final BitSet FOLLOW_ruleAdditiveExpression_in_ruleRelationalExpression7748 = new BitSet(new long[]{0x0000000000000002L,0x0000000001FC0000L});
    public static final BitSet FOLLOW_ruleRelationalOp_in_entryRuleRelationalOp7787 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleRelationalOp7798 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_82_in_ruleRelationalOp7836 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_83_in_ruleRelationalOp7855 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_84_in_ruleRelationalOp7874 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_85_in_ruleRelationalOp7893 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_86_in_ruleRelationalOp7912 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_87_in_ruleRelationalOp7931 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_88_in_ruleRelationalOp7950 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleAdditiveExpression_in_entryRuleAdditiveExpression7990 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleAdditiveExpression8000 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleMultiplicativeExpression_in_ruleAdditiveExpression8046 = new BitSet(new long[]{0x0000000000000002L,0x0000000006000000L});
    public static final BitSet FOLLOW_89_in_ruleAdditiveExpression8060 = new BitSet(new long[]{0x0210000000007E10L,0xFFFFE7C3C6000000L,0x00000000000203FFL});
    public static final BitSet FOLLOW_90_in_ruleAdditiveExpression8078 = new BitSet(new long[]{0x0210000000007E10L,0xFFFFE7C3C6000000L,0x00000000000203FFL});
    public static final BitSet FOLLOW_ruleMultiplicativeExpression_in_ruleAdditiveExpression8100 = new BitSet(new long[]{0x0000000000000002L,0x0000000006000000L});
    public static final BitSet FOLLOW_ruleMultiplicativeExpression_in_entryRuleMultiplicativeExpression8138 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleMultiplicativeExpression8148 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleUnaryExpression_in_ruleMultiplicativeExpression8194 = new BitSet(new long[]{0x0000000000000002L,0x0000000038000000L});
    public static final BitSet FOLLOW_91_in_ruleMultiplicativeExpression8208 = new BitSet(new long[]{0x0210000000007E10L,0xFFFFE7C3C6000000L,0x00000000000203FFL});
    public static final BitSet FOLLOW_92_in_ruleMultiplicativeExpression8226 = new BitSet(new long[]{0x0210000000007E10L,0xFFFFE7C3C6000000L,0x00000000000203FFL});
    public static final BitSet FOLLOW_93_in_ruleMultiplicativeExpression8244 = new BitSet(new long[]{0x0210000000007E10L,0xFFFFE7C3C6000000L,0x00000000000203FFL});
    public static final BitSet FOLLOW_ruleUnaryExpression_in_ruleMultiplicativeExpression8266 = new BitSet(new long[]{0x0000000000000002L,0x0000000038000000L});
    public static final BitSet FOLLOW_ruleUnaryExpression_in_entryRuleUnaryExpression8304 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleUnaryExpression8314 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_89_in_ruleUnaryExpression8352 = new BitSet(new long[]{0x0210000000007E10L,0xFFFFE7C3C6000000L,0x00000000000203FFL});
    public static final BitSet FOLLOW_ruleUnaryExpression_in_ruleUnaryExpression8374 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_90_in_ruleUnaryExpression8393 = new BitSet(new long[]{0x0210000000007E10L,0xFFFFE7C3C6000000L,0x00000000000203FFL});
    public static final BitSet FOLLOW_ruleUnaryExpression_in_ruleUnaryExpression8415 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_94_in_ruleUnaryExpression8434 = new BitSet(new long[]{0x0210000000007E10L,0xFFFFE7C3C6000000L,0x00000000000203FFL});
    public static final BitSet FOLLOW_ruleUnaryExpression_in_ruleUnaryExpression8456 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_95_in_ruleUnaryExpression8475 = new BitSet(new long[]{0x0210000000007E10L,0xFFFFE7C3C6000000L,0x00000000000203FFL});
    public static final BitSet FOLLOW_ruleUnaryExpression_in_ruleUnaryExpression8497 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_57_in_ruleUnaryExpression8516 = new BitSet(new long[]{0x0210000000007E10L,0xFFFFE7C3C6000000L,0x00000000000203FFL});
    public static final BitSet FOLLOW_ruleExpression_in_ruleUnaryExpression8537 = new BitSet(new long[]{0x0020000000000000L});
    public static final BitSet FOLLOW_53_in_ruleUnaryExpression8549 = new BitSet(new long[]{0x0210000000007E10L,0xFFFFE7C3C6000000L,0x00000000000203FFL});
    public static final BitSet FOLLOW_ruleExpression_in_ruleUnaryExpression8570 = new BitSet(new long[]{0x0400000000000000L});
    public static final BitSet FOLLOW_58_in_ruleUnaryExpression8582 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleUnaryExpressionNotPlusMinus_in_ruleUnaryExpression8611 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleUnaryExpressionNotPlusMinus_in_entryRuleUnaryExpressionNotPlusMinus8646 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleUnaryExpressionNotPlusMinus8656 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_96_in_ruleUnaryExpressionNotPlusMinus8704 = new BitSet(new long[]{0x0210000000007E10L,0xFFFFE7C3C6000000L,0x00000000000203FFL});
    public static final BitSet FOLLOW_ruleUnaryExpression_in_ruleUnaryExpressionNotPlusMinus8725 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleCastExpression_in_ruleUnaryExpressionNotPlusMinus8763 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_rulePrimary_in_ruleUnaryExpressionNotPlusMinus8790 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleBuilt_In_Methods_in_ruleUnaryExpressionNotPlusMinus8817 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_rulePrimary_in_entryRulePrimary8854 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRulePrimary8864 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleParExpression_in_rulePrimary8920 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleLiteral_in_rulePrimary8947 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleNewByClass_in_rulePrimary8974 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleNewArray_in_rulePrimary9001 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_97_in_rulePrimary9020 = new BitSet(new long[]{0x0210000100000002L,0x0000003000000000L});
    public static final BitSet FOLLOW_32_in_rulePrimary9033 = new BitSet(new long[]{0x0000000000000010L});
    public static final BitSet FOLLOW_RULE_ID_in_rulePrimary9050 = new BitSet(new long[]{0x0210000100000002L,0x0000003000000000L});
    public static final BitSet FOLLOW_ruleDimExpr_in_rulePrimary9076 = new BitSet(new long[]{0x0210000100000002L,0x0000003000000000L});
    public static final BitSet FOLLOW_ruleIdentifierSuffix_in_rulePrimary9110 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_RULE_ID_in_rulePrimary9136 = new BitSet(new long[]{0x0210000100000002L,0x0000003000000000L});
    public static final BitSet FOLLOW_ruleDimExpr_in_rulePrimary9162 = new BitSet(new long[]{0x0210000100000002L,0x0000003000000000L});
    public static final BitSet FOLLOW_32_in_rulePrimary9176 = new BitSet(new long[]{0x0000000000000010L});
    public static final BitSet FOLLOW_RULE_ID_in_rulePrimary9193 = new BitSet(new long[]{0x0210000100000002L,0x0000003000000000L});
    public static final BitSet FOLLOW_ruleDimExpr_in_rulePrimary9219 = new BitSet(new long[]{0x0210000100000002L,0x0000003000000000L});
    public static final BitSet FOLLOW_ruleIdentifierSuffix_in_rulePrimary9253 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleIdentifierSuffix_in_entryRuleIdentifierSuffix9292 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleIdentifierSuffix9302 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_57_in_ruleIdentifierSuffix9351 = new BitSet(new long[]{0x0400000000000000L});
    public static final BitSet FOLLOW_58_in_ruleIdentifierSuffix9363 = new BitSet(new long[]{0x0200000100000000L});
    public static final BitSet FOLLOW_32_in_ruleIdentifierSuffix9377 = new BitSet(new long[]{0x0002000000000000L});
    public static final BitSet FOLLOW_49_in_ruleIdentifierSuffix9389 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleArguments_in_ruleIdentifierSuffix9417 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_32_in_ruleIdentifierSuffix9436 = new BitSet(new long[]{0x0002000000000000L});
    public static final BitSet FOLLOW_49_in_ruleIdentifierSuffix9448 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_32_in_ruleIdentifierSuffix9468 = new BitSet(new long[]{0x0000000000000000L,0x0000000200000000L});
    public static final BitSet FOLLOW_97_in_ruleIdentifierSuffix9480 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_32_in_ruleIdentifierSuffix9500 = new BitSet(new long[]{0x0000000000000000L,0x0000000400000000L});
    public static final BitSet FOLLOW_98_in_ruleIdentifierSuffix9512 = new BitSet(new long[]{0x0010000000000000L});
    public static final BitSet FOLLOW_ruleArguments_in_ruleIdentifierSuffix9533 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_32_in_ruleIdentifierSuffix9553 = new BitSet(new long[]{0x0000000000000000L,0x0000000800000000L});
    public static final BitSet FOLLOW_99_in_ruleIdentifierSuffix9571 = new BitSet(new long[]{0x0010000000000000L});
    public static final BitSet FOLLOW_ruleArguments_in_ruleIdentifierSuffix9605 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_32_in_ruleIdentifierSuffix9625 = new BitSet(new long[]{0x4000000000000000L});
    public static final BitSet FOLLOW_62_in_ruleIdentifierSuffix9637 = new BitSet(new long[]{0x0010000000000000L});
    public static final BitSet FOLLOW_52_in_ruleIdentifierSuffix9649 = new BitSet(new long[]{0x0040000000000000L});
    public static final BitSet FOLLOW_54_in_ruleIdentifierSuffix9661 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_32_in_ruleIdentifierSuffix9681 = new BitSet(new long[]{0x8000000000000000L});
    public static final BitSet FOLLOW_63_in_ruleIdentifierSuffix9693 = new BitSet(new long[]{0x0010000000000000L});
    public static final BitSet FOLLOW_52_in_ruleIdentifierSuffix9705 = new BitSet(new long[]{0x0040000000000000L});
    public static final BitSet FOLLOW_54_in_ruleIdentifierSuffix9717 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_100_in_ruleIdentifierSuffix9736 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_101_in_ruleIdentifierSuffix9754 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleArguments_in_entryRuleArguments9791 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleArguments9801 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_52_in_ruleArguments9847 = new BitSet(new long[]{0x0250000000007E10L,0xFFFFE7C3C6000000L,0x00000000000203FFL});
    public static final BitSet FOLLOW_ruleExpressionList_in_ruleArguments9868 = new BitSet(new long[]{0x0040000000000000L});
    public static final BitSet FOLLOW_54_in_ruleArguments9881 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleExpressionList_in_entryRuleExpressionList9917 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleExpressionList9927 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleExpression_in_ruleExpressionList9973 = new BitSet(new long[]{0x0020000000000002L});
    public static final BitSet FOLLOW_53_in_ruleExpressionList9986 = new BitSet(new long[]{0x0210000000007E10L,0xFFFFE7C3C6000000L,0x00000000000203FFL});
    public static final BitSet FOLLOW_ruleExpression_in_ruleExpressionList10007 = new BitSet(new long[]{0x0020000000000002L});
    public static final BitSet FOLLOW_ruleCastExpression_in_entryRuleCastExpression10045 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleCastExpression10055 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_52_in_ruleCastExpression10101 = new BitSet(new long[]{0x00001FF600000010L});
    public static final BitSet FOLLOW_ruleUseType_in_ruleCastExpression10122 = new BitSet(new long[]{0x0040000000000000L});
    public static final BitSet FOLLOW_54_in_ruleCastExpression10134 = new BitSet(new long[]{0x0210000000007E10L,0xFFFFE7C3C6000000L,0x00000000000203FFL});
    public static final BitSet FOLLOW_ruleUnaryExpressionNotPlusMinus_in_ruleCastExpression10155 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleParExpression_in_entryRuleParExpression10191 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleParExpression10201 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_52_in_ruleParExpression10238 = new BitSet(new long[]{0x0210000000007E10L,0xFFFFE7C3C6000000L,0x00000000000203FFL});
    public static final BitSet FOLLOW_ruleExpression_in_ruleParExpression10259 = new BitSet(new long[]{0x0060000000000000L});
    public static final BitSet FOLLOW_53_in_ruleParExpression10272 = new BitSet(new long[]{0x0210000000007E10L,0xFFFFE7C3C6000000L,0x00000000000203FFL});
    public static final BitSet FOLLOW_ruleExpression_in_ruleParExpression10293 = new BitSet(new long[]{0x0060000000000000L});
    public static final BitSet FOLLOW_54_in_ruleParExpression10307 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleLiteral_in_entryRuleLiteral10343 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleLiteral10353 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_102_in_ruleLiteral10406 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleIntegerLiteral_in_ruleLiteral10457 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_RULE_FLOATING_POINT_LITERAL_in_ruleLiteral10491 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_RULE_CHARACTER_LITERAL_in_ruleLiteral10530 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_RULE_STRING_LITERAL_in_ruleLiteral10569 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleBooleanLiteral_in_ruleLiteral10612 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_103_in_ruleLiteral10647 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleIntegerLiteral_in_entryRuleIntegerLiteral10698 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleIntegerLiteral10709 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_RULE_HEX_LITERAL_in_ruleIntegerLiteral10749 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_RULE_OCTAL_LITERAL_in_ruleIntegerLiteral10775 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_RULE_DECIMAL_LITERAL_in_ruleIntegerLiteral10801 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleBooleanLiteral_in_entryRuleBooleanLiteral10847 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleBooleanLiteral10858 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_104_in_ruleBooleanLiteral10896 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_105_in_ruleBooleanLiteral10915 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleDE_LHS_in_entryRuleDE_LHS10955 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleDE_LHS10965 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_106_in_ruleDE_LHS11002 = new BitSet(new long[]{0x0010000000000000L});
    public static final BitSet FOLLOW_52_in_ruleDE_LHS11014 = new BitSet(new long[]{0x0000000000000010L});
    public static final BitSet FOLLOW_RULE_ID_in_ruleDE_LHS11031 = new BitSet(new long[]{0x0020000000000000L});
    public static final BitSet FOLLOW_53_in_ruleDE_LHS11049 = new BitSet(new long[]{0x0000000000000010L});
    public static final BitSet FOLLOW_RULE_ID_in_ruleDE_LHS11066 = new BitSet(new long[]{0x0020000000000000L});
    public static final BitSet FOLLOW_53_in_ruleDE_LHS11085 = new BitSet(new long[]{0x0000000000007000L});
    public static final BitSet FOLLOW_ruleIntegerLiteral_in_ruleDE_LHS11106 = new BitSet(new long[]{0x0040000000000000L});
    public static final BitSet FOLLOW_54_in_ruleDE_LHS11118 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleDifferentialEquation_in_entryRuleDifferentialEquation11154 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleDifferentialEquation11164 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_107_in_ruleDifferentialEquation11202 = new BitSet(new long[]{0x0800000000000000L,0x0000040000000000L});
    public static final BitSet FOLLOW_59_in_ruleDifferentialEquation11217 = new BitSet(new long[]{0x0000000000000000L,0x0000040000000000L});
    public static final BitSet FOLLOW_ruleDE_LHS_in_ruleDifferentialEquation11240 = new BitSet(new long[]{0x0000000000000000L,0x0000000000008000L});
    public static final BitSet FOLLOW_79_in_ruleDifferentialEquation11252 = new BitSet(new long[]{0x0210000000007E10L,0xFFFFE7C3C6000000L,0x00000000000203FFL});
    public static final BitSet FOLLOW_ruleAdditiveExpression_in_ruleDifferentialEquation11273 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleContinuousMethod_in_entryRuleContinuousMethod11309 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleContinuousMethod11319 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_37_in_ruleContinuousMethod11365 = new BitSet(new long[]{0x0000000000000000L,0x0000100000000000L});
    public static final BitSet FOLLOW_108_in_ruleContinuousMethod11383 = new BitSet(new long[]{0x0010000000000000L});
    public static final BitSet FOLLOW_52_in_ruleContinuousMethod11408 = new BitSet(new long[]{0x0040000000000000L});
    public static final BitSet FOLLOW_54_in_ruleContinuousMethod11420 = new BitSet(new long[]{0x0000800000000000L});
    public static final BitSet FOLLOW_47_in_ruleContinuousMethod11432 = new BitSet(new long[]{0x0801000000000000L,0x00000C0000000000L});
    public static final BitSet FOLLOW_ruleDifferentialEquation_in_ruleContinuousMethod11454 = new BitSet(new long[]{0x0000000020000000L});
    public static final BitSet FOLLOW_29_in_ruleContinuousMethod11466 = new BitSet(new long[]{0x0801000000000000L,0x00000C0000000000L});
    public static final BitSet FOLLOW_48_in_ruleContinuousMethod11480 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleAbstractContinuousMethod_in_entryRuleAbstractContinuousMethod11516 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleAbstractContinuousMethod11526 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_37_in_ruleAbstractContinuousMethod11572 = new BitSet(new long[]{0x0000000000000000L,0x0000100000000000L});
    public static final BitSet FOLLOW_108_in_ruleAbstractContinuousMethod11590 = new BitSet(new long[]{0x0010000000000000L});
    public static final BitSet FOLLOW_52_in_ruleAbstractContinuousMethod11615 = new BitSet(new long[]{0x0040000000000000L});
    public static final BitSet FOLLOW_54_in_ruleAbstractContinuousMethod11627 = new BitSet(new long[]{0x0000000020000000L});
    public static final BitSet FOLLOW_29_in_ruleAbstractContinuousMethod11639 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleBuilt_In_Methods_in_entryRuleBuilt_In_Methods11675 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleBuilt_In_Methods11685 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleSqrt_in_ruleBuilt_In_Methods11732 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleSin_in_ruleBuilt_In_Methods11759 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleCos_in_ruleBuilt_In_Methods11786 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleTan_in_ruleBuilt_In_Methods11813 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleCot_in_ruleBuilt_In_Methods11840 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleSec_in_ruleBuilt_In_Methods11867 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleCsc_in_ruleBuilt_In_Methods11894 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleRound_in_ruleBuilt_In_Methods11921 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleFloor_in_ruleBuilt_In_Methods11948 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleCeil_in_ruleBuilt_In_Methods11975 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleDiv_in_ruleBuilt_In_Methods12002 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleFld_in_ruleBuilt_In_Methods12029 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleRem_in_ruleBuilt_In_Methods12056 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleMod_in_ruleBuilt_In_Methods12083 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleGcd_in_ruleBuilt_In_Methods12110 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleLcm_in_ruleBuilt_In_Methods12137 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleAbs_in_ruleBuilt_In_Methods12164 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleSign_in_ruleBuilt_In_Methods12191 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleRoot_in_ruleBuilt_In_Methods12218 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleHypot_in_ruleBuilt_In_Methods12245 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_rulePow_in_ruleBuilt_In_Methods12272 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleExp_in_ruleBuilt_In_Methods12299 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleLog_in_ruleBuilt_In_Methods12326 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleErf_in_ruleBuilt_In_Methods12353 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleGamma_in_ruleBuilt_In_Methods12380 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleMax_in_ruleBuilt_In_Methods12407 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleMin_in_ruleBuilt_In_Methods12434 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_rulePause_in_ruleBuilt_In_Methods12461 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleDE_LHS_in_ruleBuilt_In_Methods12488 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleSize_in_ruleBuilt_In_Methods12515 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleSqrt_in_entryRuleSqrt12550 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleSqrt12560 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_109_in_ruleSqrt12603 = new BitSet(new long[]{0x0010000000000000L});
    public static final BitSet FOLLOW_52_in_ruleSqrt12628 = new BitSet(new long[]{0x0210000000007E10L,0xFFFFE7C3C6000000L,0x00000000000203FFL});
    public static final BitSet FOLLOW_ruleAdditiveExpression_in_ruleSqrt12649 = new BitSet(new long[]{0x0040000000000000L});
    public static final BitSet FOLLOW_54_in_ruleSqrt12661 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleSin_in_entryRuleSin12697 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleSin12707 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_110_in_ruleSin12750 = new BitSet(new long[]{0x0010000000000000L});
    public static final BitSet FOLLOW_52_in_ruleSin12775 = new BitSet(new long[]{0x0210000000007E10L,0xFFFFE7C3C6000000L,0x00000000000203FFL});
    public static final BitSet FOLLOW_ruleAdditiveExpression_in_ruleSin12796 = new BitSet(new long[]{0x0040000000000000L});
    public static final BitSet FOLLOW_54_in_ruleSin12808 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleCos_in_entryRuleCos12844 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleCos12854 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_111_in_ruleCos12897 = new BitSet(new long[]{0x0010000000000000L});
    public static final BitSet FOLLOW_52_in_ruleCos12922 = new BitSet(new long[]{0x0210000000007E10L,0xFFFFE7C3C6000000L,0x00000000000203FFL});
    public static final BitSet FOLLOW_ruleAdditiveExpression_in_ruleCos12943 = new BitSet(new long[]{0x0040000000000000L});
    public static final BitSet FOLLOW_54_in_ruleCos12955 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleTan_in_entryRuleTan12991 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleTan13001 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_112_in_ruleTan13044 = new BitSet(new long[]{0x0010000000000000L});
    public static final BitSet FOLLOW_52_in_ruleTan13069 = new BitSet(new long[]{0x0210000000007E10L,0xFFFFE7C3C6000000L,0x00000000000203FFL});
    public static final BitSet FOLLOW_ruleAdditiveExpression_in_ruleTan13090 = new BitSet(new long[]{0x0040000000000000L});
    public static final BitSet FOLLOW_54_in_ruleTan13102 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleCot_in_entryRuleCot13138 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleCot13148 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_113_in_ruleCot13191 = new BitSet(new long[]{0x0010000000000000L});
    public static final BitSet FOLLOW_52_in_ruleCot13216 = new BitSet(new long[]{0x0210000000007E10L,0xFFFFE7C3C6000000L,0x00000000000203FFL});
    public static final BitSet FOLLOW_ruleAdditiveExpression_in_ruleCot13237 = new BitSet(new long[]{0x0040000000000000L});
    public static final BitSet FOLLOW_54_in_ruleCot13249 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleSec_in_entryRuleSec13285 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleSec13295 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_114_in_ruleSec13338 = new BitSet(new long[]{0x0010000000000000L});
    public static final BitSet FOLLOW_52_in_ruleSec13363 = new BitSet(new long[]{0x0210000000007E10L,0xFFFFE7C3C6000000L,0x00000000000203FFL});
    public static final BitSet FOLLOW_ruleAdditiveExpression_in_ruleSec13384 = new BitSet(new long[]{0x0040000000000000L});
    public static final BitSet FOLLOW_54_in_ruleSec13396 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleCsc_in_entryRuleCsc13432 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleCsc13442 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_115_in_ruleCsc13485 = new BitSet(new long[]{0x0010000000000000L});
    public static final BitSet FOLLOW_52_in_ruleCsc13510 = new BitSet(new long[]{0x0210000000007E10L,0xFFFFE7C3C6000000L,0x00000000000203FFL});
    public static final BitSet FOLLOW_ruleAdditiveExpression_in_ruleCsc13531 = new BitSet(new long[]{0x0040000000000000L});
    public static final BitSet FOLLOW_54_in_ruleCsc13543 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleRound_in_entryRuleRound13579 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleRound13589 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_116_in_ruleRound13632 = new BitSet(new long[]{0x0010000000000000L});
    public static final BitSet FOLLOW_52_in_ruleRound13657 = new BitSet(new long[]{0x0210000000007E10L,0xFFFFE7C3C6000000L,0x00000000000203FFL});
    public static final BitSet FOLLOW_ruleAdditiveExpression_in_ruleRound13678 = new BitSet(new long[]{0x0040000000000000L});
    public static final BitSet FOLLOW_54_in_ruleRound13690 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleFloor_in_entryRuleFloor13726 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleFloor13736 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_117_in_ruleFloor13779 = new BitSet(new long[]{0x0010000000000000L});
    public static final BitSet FOLLOW_52_in_ruleFloor13804 = new BitSet(new long[]{0x0210000000007E10L,0xFFFFE7C3C6000000L,0x00000000000203FFL});
    public static final BitSet FOLLOW_ruleAdditiveExpression_in_ruleFloor13825 = new BitSet(new long[]{0x0040000000000000L});
    public static final BitSet FOLLOW_54_in_ruleFloor13837 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleCeil_in_entryRuleCeil13873 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleCeil13883 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_118_in_ruleCeil13926 = new BitSet(new long[]{0x0010000000000000L});
    public static final BitSet FOLLOW_52_in_ruleCeil13951 = new BitSet(new long[]{0x0210000000007E10L,0xFFFFE7C3C6000000L,0x00000000000203FFL});
    public static final BitSet FOLLOW_ruleAdditiveExpression_in_ruleCeil13972 = new BitSet(new long[]{0x0040000000000000L});
    public static final BitSet FOLLOW_54_in_ruleCeil13984 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleDiv_in_entryRuleDiv14020 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleDiv14030 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_119_in_ruleDiv14073 = new BitSet(new long[]{0x0010000000000000L});
    public static final BitSet FOLLOW_52_in_ruleDiv14098 = new BitSet(new long[]{0x0210000000007E10L,0xFFFFE7C3C6000000L,0x00000000000203FFL});
    public static final BitSet FOLLOW_ruleAdditiveExpression_in_ruleDiv14119 = new BitSet(new long[]{0x0020000000000000L});
    public static final BitSet FOLLOW_53_in_ruleDiv14131 = new BitSet(new long[]{0x0210000000007E10L,0xFFFFE7C3C6000000L,0x00000000000203FFL});
    public static final BitSet FOLLOW_ruleAdditiveExpression_in_ruleDiv14152 = new BitSet(new long[]{0x0040000000000000L});
    public static final BitSet FOLLOW_54_in_ruleDiv14164 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleFld_in_entryRuleFld14200 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleFld14210 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_120_in_ruleFld14253 = new BitSet(new long[]{0x0010000000000000L});
    public static final BitSet FOLLOW_52_in_ruleFld14278 = new BitSet(new long[]{0x0210000000007E10L,0xFFFFE7C3C6000000L,0x00000000000203FFL});
    public static final BitSet FOLLOW_ruleAdditiveExpression_in_ruleFld14299 = new BitSet(new long[]{0x0020000000000000L});
    public static final BitSet FOLLOW_53_in_ruleFld14311 = new BitSet(new long[]{0x0210000000007E10L,0xFFFFE7C3C6000000L,0x00000000000203FFL});
    public static final BitSet FOLLOW_ruleAdditiveExpression_in_ruleFld14332 = new BitSet(new long[]{0x0040000000000000L});
    public static final BitSet FOLLOW_54_in_ruleFld14344 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleRem_in_entryRuleRem14380 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleRem14390 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_121_in_ruleRem14433 = new BitSet(new long[]{0x0010000000000000L});
    public static final BitSet FOLLOW_52_in_ruleRem14458 = new BitSet(new long[]{0x0210000000007E10L,0xFFFFE7C3C6000000L,0x00000000000203FFL});
    public static final BitSet FOLLOW_ruleAdditiveExpression_in_ruleRem14479 = new BitSet(new long[]{0x0020000000000000L});
    public static final BitSet FOLLOW_53_in_ruleRem14491 = new BitSet(new long[]{0x0210000000007E10L,0xFFFFE7C3C6000000L,0x00000000000203FFL});
    public static final BitSet FOLLOW_ruleAdditiveExpression_in_ruleRem14512 = new BitSet(new long[]{0x0040000000000000L});
    public static final BitSet FOLLOW_54_in_ruleRem14524 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleMod_in_entryRuleMod14560 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleMod14570 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_122_in_ruleMod14613 = new BitSet(new long[]{0x0010000000000000L});
    public static final BitSet FOLLOW_52_in_ruleMod14638 = new BitSet(new long[]{0x0210000000007E10L,0xFFFFE7C3C6000000L,0x00000000000203FFL});
    public static final BitSet FOLLOW_ruleAdditiveExpression_in_ruleMod14659 = new BitSet(new long[]{0x0020000000000000L});
    public static final BitSet FOLLOW_53_in_ruleMod14671 = new BitSet(new long[]{0x0210000000007E10L,0xFFFFE7C3C6000000L,0x00000000000203FFL});
    public static final BitSet FOLLOW_ruleAdditiveExpression_in_ruleMod14692 = new BitSet(new long[]{0x0040000000000000L});
    public static final BitSet FOLLOW_54_in_ruleMod14704 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleGcd_in_entryRuleGcd14740 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleGcd14750 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_123_in_ruleGcd14793 = new BitSet(new long[]{0x0010000000000000L});
    public static final BitSet FOLLOW_52_in_ruleGcd14818 = new BitSet(new long[]{0x0210000000007E10L,0xFFFFE7C3C6000000L,0x00000000000203FFL});
    public static final BitSet FOLLOW_ruleAdditiveExpression_in_ruleGcd14839 = new BitSet(new long[]{0x0060000000000000L});
    public static final BitSet FOLLOW_53_in_ruleGcd14852 = new BitSet(new long[]{0x0210000000007E10L,0xFFFFE7C3C6000000L,0x00000000000203FFL});
    public static final BitSet FOLLOW_ruleAdditiveExpression_in_ruleGcd14873 = new BitSet(new long[]{0x0060000000000000L});
    public static final BitSet FOLLOW_54_in_ruleGcd14887 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleLcm_in_entryRuleLcm14923 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleLcm14933 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_124_in_ruleLcm14976 = new BitSet(new long[]{0x0010000000000000L});
    public static final BitSet FOLLOW_52_in_ruleLcm15001 = new BitSet(new long[]{0x0210000000007E10L,0xFFFFE7C3C6000000L,0x00000000000203FFL});
    public static final BitSet FOLLOW_ruleAdditiveExpression_in_ruleLcm15022 = new BitSet(new long[]{0x0060000000000000L});
    public static final BitSet FOLLOW_53_in_ruleLcm15035 = new BitSet(new long[]{0x0210000000007E10L,0xFFFFE7C3C6000000L,0x00000000000203FFL});
    public static final BitSet FOLLOW_ruleAdditiveExpression_in_ruleLcm15056 = new BitSet(new long[]{0x0060000000000000L});
    public static final BitSet FOLLOW_54_in_ruleLcm15070 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleAbs_in_entryRuleAbs15106 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleAbs15116 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_125_in_ruleAbs15159 = new BitSet(new long[]{0x0010000000000000L});
    public static final BitSet FOLLOW_52_in_ruleAbs15184 = new BitSet(new long[]{0x0210000000007E10L,0xFFFFE7C3C6000000L,0x00000000000203FFL});
    public static final BitSet FOLLOW_ruleAdditiveExpression_in_ruleAbs15205 = new BitSet(new long[]{0x0040000000000000L});
    public static final BitSet FOLLOW_54_in_ruleAbs15217 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleSign_in_entryRuleSign15253 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleSign15263 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_126_in_ruleSign15306 = new BitSet(new long[]{0x0010000000000000L});
    public static final BitSet FOLLOW_52_in_ruleSign15331 = new BitSet(new long[]{0x0210000000007E10L,0xFFFFE7C3C6000000L,0x00000000000203FFL});
    public static final BitSet FOLLOW_ruleAdditiveExpression_in_ruleSign15352 = new BitSet(new long[]{0x0040000000000000L});
    public static final BitSet FOLLOW_54_in_ruleSign15364 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleRoot_in_entryRuleRoot15400 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleRoot15410 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_127_in_ruleRoot15453 = new BitSet(new long[]{0x0010000000000000L});
    public static final BitSet FOLLOW_52_in_ruleRoot15478 = new BitSet(new long[]{0x0210000000007E10L,0xFFFFE7C3C6000000L,0x00000000000203FFL});
    public static final BitSet FOLLOW_ruleAdditiveExpression_in_ruleRoot15499 = new BitSet(new long[]{0x0020000000000000L});
    public static final BitSet FOLLOW_53_in_ruleRoot15511 = new BitSet(new long[]{0x0210000000007E10L,0xFFFFE7C3C6000000L,0x00000000000203FFL});
    public static final BitSet FOLLOW_ruleAdditiveExpression_in_ruleRoot15532 = new BitSet(new long[]{0x0040000000000000L});
    public static final BitSet FOLLOW_54_in_ruleRoot15544 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleHypot_in_entryRuleHypot15580 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleHypot15590 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_128_in_ruleHypot15633 = new BitSet(new long[]{0x0010000000000000L});
    public static final BitSet FOLLOW_52_in_ruleHypot15658 = new BitSet(new long[]{0x0210000000007E10L,0xFFFFE7C3C6000000L,0x00000000000203FFL});
    public static final BitSet FOLLOW_ruleAdditiveExpression_in_ruleHypot15679 = new BitSet(new long[]{0x0020000000000000L});
    public static final BitSet FOLLOW_53_in_ruleHypot15691 = new BitSet(new long[]{0x0210000000007E10L,0xFFFFE7C3C6000000L,0x00000000000203FFL});
    public static final BitSet FOLLOW_ruleAdditiveExpression_in_ruleHypot15712 = new BitSet(new long[]{0x0040000000000000L});
    public static final BitSet FOLLOW_54_in_ruleHypot15724 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_rulePow_in_entryRulePow15760 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRulePow15770 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_129_in_rulePow15813 = new BitSet(new long[]{0x0010000000000000L});
    public static final BitSet FOLLOW_52_in_rulePow15838 = new BitSet(new long[]{0x0210000000007E10L,0xFFFFE7C3C6000000L,0x00000000000203FFL});
    public static final BitSet FOLLOW_ruleAdditiveExpression_in_rulePow15859 = new BitSet(new long[]{0x0020000000000000L});
    public static final BitSet FOLLOW_53_in_rulePow15871 = new BitSet(new long[]{0x0210000000007E10L,0xFFFFE7C3C6000000L,0x00000000000203FFL});
    public static final BitSet FOLLOW_ruleAdditiveExpression_in_rulePow15892 = new BitSet(new long[]{0x0040000000000000L});
    public static final BitSet FOLLOW_54_in_rulePow15904 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleExp_in_entryRuleExp15940 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleExp15950 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_130_in_ruleExp15993 = new BitSet(new long[]{0x0010000000000000L});
    public static final BitSet FOLLOW_52_in_ruleExp16018 = new BitSet(new long[]{0x0210000000007E10L,0xFFFFE7C3C6000000L,0x00000000000203FFL});
    public static final BitSet FOLLOW_ruleAdditiveExpression_in_ruleExp16039 = new BitSet(new long[]{0x0040000000000000L});
    public static final BitSet FOLLOW_54_in_ruleExp16051 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleLog_in_entryRuleLog16087 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleLog16097 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_131_in_ruleLog16140 = new BitSet(new long[]{0x0010000000000000L});
    public static final BitSet FOLLOW_52_in_ruleLog16165 = new BitSet(new long[]{0x0210000000007E10L,0xFFFFE7C3C6000000L,0x00000000000203FFL});
    public static final BitSet FOLLOW_ruleAdditiveExpression_in_ruleLog16186 = new BitSet(new long[]{0x0060000000000000L});
    public static final BitSet FOLLOW_53_in_ruleLog16199 = new BitSet(new long[]{0x0210000000007E10L,0xFFFFE7C3C6000000L,0x00000000000203FFL});
    public static final BitSet FOLLOW_ruleAdditiveExpression_in_ruleLog16220 = new BitSet(new long[]{0x0040000000000000L});
    public static final BitSet FOLLOW_54_in_ruleLog16234 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleErf_in_entryRuleErf16270 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleErf16280 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_132_in_ruleErf16323 = new BitSet(new long[]{0x0010000000000000L});
    public static final BitSet FOLLOW_52_in_ruleErf16348 = new BitSet(new long[]{0x0210000000007E10L,0xFFFFE7C3C6000000L,0x00000000000203FFL});
    public static final BitSet FOLLOW_ruleAdditiveExpression_in_ruleErf16369 = new BitSet(new long[]{0x0040000000000000L});
    public static final BitSet FOLLOW_54_in_ruleErf16381 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleGamma_in_entryRuleGamma16417 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleGamma16427 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_133_in_ruleGamma16470 = new BitSet(new long[]{0x0010000000000000L});
    public static final BitSet FOLLOW_52_in_ruleGamma16495 = new BitSet(new long[]{0x0210000000007E10L,0xFFFFE7C3C6000000L,0x00000000000203FFL});
    public static final BitSet FOLLOW_ruleAdditiveExpression_in_ruleGamma16516 = new BitSet(new long[]{0x0040000000000000L});
    public static final BitSet FOLLOW_54_in_ruleGamma16528 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleMax_in_entryRuleMax16564 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleMax16574 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_134_in_ruleMax16617 = new BitSet(new long[]{0x0010000000000000L});
    public static final BitSet FOLLOW_52_in_ruleMax16642 = new BitSet(new long[]{0x0210000000007E10L,0xFFFFE7C3C6000000L,0x00000000000203FFL});
    public static final BitSet FOLLOW_ruleAdditiveExpression_in_ruleMax16663 = new BitSet(new long[]{0x0060000000000000L});
    public static final BitSet FOLLOW_53_in_ruleMax16676 = new BitSet(new long[]{0x0210000000007E10L,0xFFFFE7C3C6000000L,0x00000000000203FFL});
    public static final BitSet FOLLOW_ruleAdditiveExpression_in_ruleMax16697 = new BitSet(new long[]{0x0060000000000000L});
    public static final BitSet FOLLOW_54_in_ruleMax16711 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleMin_in_entryRuleMin16747 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleMin16757 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_135_in_ruleMin16800 = new BitSet(new long[]{0x0010000000000000L});
    public static final BitSet FOLLOW_52_in_ruleMin16825 = new BitSet(new long[]{0x0210000000007E10L,0xFFFFE7C3C6000000L,0x00000000000203FFL});
    public static final BitSet FOLLOW_ruleAdditiveExpression_in_ruleMin16846 = new BitSet(new long[]{0x0060000000000000L});
    public static final BitSet FOLLOW_53_in_ruleMin16859 = new BitSet(new long[]{0x0210000000007E10L,0xFFFFE7C3C6000000L,0x00000000000203FFL});
    public static final BitSet FOLLOW_ruleAdditiveExpression_in_ruleMin16880 = new BitSet(new long[]{0x0060000000000000L});
    public static final BitSet FOLLOW_54_in_ruleMin16894 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_rulePause_in_entryRulePause16930 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRulePause16940 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_136_in_rulePause16983 = new BitSet(new long[]{0x0010000000000000L});
    public static final BitSet FOLLOW_52_in_rulePause17008 = new BitSet(new long[]{0x0210000000007E10L,0xFFFFE7C3C6000000L,0x00000000000203FFL});
    public static final BitSet FOLLOW_ruleAdditiveExpression_in_rulePause17029 = new BitSet(new long[]{0x0040000000000000L});
    public static final BitSet FOLLOW_54_in_rulePause17041 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleSize_in_entryRuleSize17077 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleSize17087 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_137_in_ruleSize17130 = new BitSet(new long[]{0x0010000000000000L});
    public static final BitSet FOLLOW_52_in_ruleSize17155 = new BitSet(new long[]{0x0210000000007E10L,0xFFFFE7C3C6000000L,0x00000000000203FFL});
    public static final BitSet FOLLOW_ruleAdditiveExpression_in_ruleSize17176 = new BitSet(new long[]{0x0040000000000000L});
    public static final BitSet FOLLOW_54_in_ruleSize17188 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleInvariantBlock_in_entryRuleInvariantBlock17224 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleInvariantBlock17234 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_66_in_ruleInvariantBlock17277 = new BitSet(new long[]{0x0000800000000000L});
    public static final BitSet FOLLOW_47_in_ruleInvariantBlock17302 = new BitSet(new long[]{0x0211000000007E10L,0xFFFFE7C3C6000000L,0x00000000000203FFL});
    public static final BitSet FOLLOW_ruleConditionalExpression_in_ruleInvariantBlock17324 = new BitSet(new long[]{0x0000000020000000L});
    public static final BitSet FOLLOW_29_in_ruleInvariantBlock17336 = new BitSet(new long[]{0x0211000000007E10L,0xFFFFE7C3C6000000L,0x00000000000203FFL});
    public static final BitSet FOLLOW_48_in_ruleInvariantBlock17350 = new BitSet(new long[]{0x0000000020000000L});
    public static final BitSet FOLLOW_29_in_ruleInvariantBlock17362 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleBlock_in_entryRuleBlock17398 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleBlock17408 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_47_in_ruleBlock17454 = new BitSet(new long[]{0x02919FFE20007E10L,0xFFFFE7C3C6000000L,0x000000000002F7FFL});
    public static final BitSet FOLLOW_ruleBlockStatement_in_ruleBlock17475 = new BitSet(new long[]{0x02919FFE20007E10L,0xFFFFE7C3C6000000L,0x000000000002F7FFL});
    public static final BitSet FOLLOW_48_in_ruleBlock17488 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleBlockStatement_in_entryRuleBlockStatement17524 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleBlockStatement17534 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleStatement_in_ruleBlockStatement17581 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleLocalVarDecStatement_in_ruleBlockStatement17608 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleLocalVarDecStatement_in_entryRuleLocalVarDecStatement17643 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleLocalVarDecStatement17653 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleLocalVarDec_in_ruleLocalVarDecStatement17700 = new BitSet(new long[]{0x0000000020000000L});
    public static final BitSet FOLLOW_29_in_ruleLocalVarDecStatement17711 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleLocalVarDec_in_entryRuleLocalVarDec17747 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleLocalVarDec17757 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleVARIABLE_MODIFIER_in_ruleLocalVarDec17803 = new BitSet(new long[]{0x00001FF600000010L});
    public static final BitSet FOLLOW_ruleUseType_in_ruleLocalVarDec17825 = new BitSet(new long[]{0x0000000000000010L,0x0000000000000000L,0x0000000000040000L});
    public static final BitSet FOLLOW_ruleDim_in_ruleLocalVarDec17846 = new BitSet(new long[]{0x0000000000000010L,0x0000000000000000L,0x0000000000040000L});
    public static final BitSet FOLLOW_ruleLocalVarName_in_ruleLocalVarDec17868 = new BitSet(new long[]{0x0008000000000002L});
    public static final BitSet FOLLOW_51_in_ruleLocalVarDec17881 = new BitSet(new long[]{0x0210800000007E10L,0xFFFFE7C3C6000000L,0x00000000000203FFL});
    public static final BitSet FOLLOW_ruleVariableInitializer_in_ruleLocalVarDec17902 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleStatement_in_entryRuleStatement17940 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleStatement17950 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleBlock_in_ruleStatement18006 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_138_in_ruleStatement18025 = new BitSet(new long[]{0x0010000000000000L});
    public static final BitSet FOLLOW_ruleParExpression_in_ruleStatement18046 = new BitSet(new long[]{0x0290800020007E10L,0xFFFFE7C3C6000000L,0x000000000002F7FFL});
    public static final BitSet FOLLOW_ruleStatement_in_ruleStatement18067 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000000L,0x0000000000000800L});
    public static final BitSet FOLLOW_139_in_ruleStatement18088 = new BitSet(new long[]{0x0290800020007E10L,0xFFFFE7C3C6000000L,0x000000000002F7FFL});
    public static final BitSet FOLLOW_ruleStatement_in_ruleStatement18110 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_140_in_ruleStatement18132 = new BitSet(new long[]{0x0010000000000000L});
    public static final BitSet FOLLOW_52_in_ruleStatement18144 = new BitSet(new long[]{0x02101FF620007E10L,0xFFFFE7C3C6000000L,0x00000000000203FFL});
    public static final BitSet FOLLOW_ruleForControl_in_ruleStatement18165 = new BitSet(new long[]{0x0040000000000000L});
    public static final BitSet FOLLOW_54_in_ruleStatement18177 = new BitSet(new long[]{0x0290800020007E10L,0xFFFFE7C3C6000000L,0x000000000002F7FFL});
    public static final BitSet FOLLOW_ruleStatement_in_ruleStatement18198 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_141_in_ruleStatement18218 = new BitSet(new long[]{0x0000000020000010L});
    public static final BitSet FOLLOW_RULE_ID_in_ruleStatement18235 = new BitSet(new long[]{0x0000000020000000L});
    public static final BitSet FOLLOW_29_in_ruleStatement18253 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_142_in_ruleStatement18273 = new BitSet(new long[]{0x0000000020000010L});
    public static final BitSet FOLLOW_RULE_ID_in_ruleStatement18290 = new BitSet(new long[]{0x0000000020000000L});
    public static final BitSet FOLLOW_29_in_ruleStatement18308 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_143_in_ruleStatement18328 = new BitSet(new long[]{0x0010000000000000L});
    public static final BitSet FOLLOW_ruleParExpression_in_ruleStatement18349 = new BitSet(new long[]{0x0290800020007E10L,0xFFFFE7C3C6000000L,0x000000000002F7FFL});
    public static final BitSet FOLLOW_ruleStatement_in_ruleStatement18370 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleReturnStatement_in_ruleStatement18398 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleExpression_in_ruleStatement18426 = new BitSet(new long[]{0x0000000020000000L});
    public static final BitSet FOLLOW_29_in_ruleStatement18438 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_29_in_ruleStatement18457 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleForControl_in_entryRuleForControl18494 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleForControl18504 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleEnhancedForControl_in_ruleForControl18560 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleForInit_in_ruleForControl18588 = new BitSet(new long[]{0x0000000020000000L});
    public static final BitSet FOLLOW_29_in_ruleForControl18601 = new BitSet(new long[]{0x0210000020007E10L,0xFFFFE7C3C6000000L,0x00000000000203FFL});
    public static final BitSet FOLLOW_ruleExpression_in_ruleForControl18622 = new BitSet(new long[]{0x0000000020000000L});
    public static final BitSet FOLLOW_29_in_ruleForControl18635 = new BitSet(new long[]{0x0210000000007E12L,0xFFFFE7C3C6000000L,0x00000000000203FFL});
    public static final BitSet FOLLOW_ruleForUpdate_in_ruleForControl18656 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleEnhancedForControl_in_entryRuleEnhancedForControl18695 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleEnhancedForControl18705 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleUseType_in_ruleEnhancedForControl18751 = new BitSet(new long[]{0x0000000000000010L});
    public static final BitSet FOLLOW_RULE_ID_in_ruleEnhancedForControl18768 = new BitSet(new long[]{0x0800000000000000L});
    public static final BitSet FOLLOW_59_in_ruleEnhancedForControl18785 = new BitSet(new long[]{0x0210000000007E10L,0xFFFFE7C3C6000000L,0x00000000000203FFL});
    public static final BitSet FOLLOW_ruleExpression_in_ruleEnhancedForControl18806 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleForInit_in_entryRuleForInit18842 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleForInit18852 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleExpressionList_in_ruleForInit18898 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleForUpdate_in_entryRuleForUpdate18932 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleForUpdate18942 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleExpressionList_in_ruleForUpdate18988 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleCompositionMethod_in_entryRuleCompositionMethod19022 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleCompositionMethod19032 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_37_in_ruleCompositionMethod19069 = new BitSet(new long[]{0x4000000000000000L});
    public static final BitSet FOLLOW_62_in_ruleCompositionMethod19087 = new BitSet(new long[]{0x0010000000000000L});
    public static final BitSet FOLLOW_52_in_ruleCompositionMethod19112 = new BitSet(new long[]{0x0040000000000000L});
    public static final BitSet FOLLOW_54_in_ruleCompositionMethod19124 = new BitSet(new long[]{0x0000800000000000L});
    public static final BitSet FOLLOW_47_in_ruleCompositionMethod19136 = new BitSet(new long[]{0x0001000000000010L});
    public static final BitSet FOLLOW_ruleControlSwitchComposition_in_ruleCompositionMethod19157 = new BitSet(new long[]{0x0001000000000010L});
    public static final BitSet FOLLOW_48_in_ruleCompositionMethod19170 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleControlSwitchComposition_in_entryRuleControlSwitchComposition19206 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleControlSwitchComposition19216 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_RULE_ID_in_ruleControlSwitchComposition19268 = new BitSet(new long[]{0x0010000000000000L,0x0000003000000000L});
    public static final BitSet FOLLOW_52_in_ruleControlSwitchComposition19293 = new BitSet(new long[]{0x0040000000000000L});
    public static final BitSet FOLLOW_54_in_ruleControlSwitchComposition19318 = new BitSet(new long[]{0x0010000000000000L});
    public static final BitSet FOLLOW_101_in_ruleControlSwitchComposition19343 = new BitSet(new long[]{0x0010000000000000L});
    public static final BitSet FOLLOW_100_in_ruleControlSwitchComposition19380 = new BitSet(new long[]{0x0010000000000000L});
    public static final BitSet FOLLOW_52_in_ruleControlSwitchComposition19407 = new BitSet(new long[]{0x0210800000007E10L,0xFFFFE7C3C6000000L,0x00000000000203FFL});
    public static final BitSet FOLLOW_ruleExpression_in_ruleControlSwitchComposition19429 = new BitSet(new long[]{0x0020000000000000L});
    public static final BitSet FOLLOW_47_in_ruleControlSwitchComposition19448 = new BitSet(new long[]{0x0210000000007E10L,0xFFFFE7C3C6000000L,0x00000000000203FFL});
    public static final BitSet FOLLOW_ruleExpressionList_in_ruleControlSwitchComposition19469 = new BitSet(new long[]{0x0001000000000000L});
    public static final BitSet FOLLOW_48_in_ruleControlSwitchComposition19481 = new BitSet(new long[]{0x0020000000000000L});
    public static final BitSet FOLLOW_53_in_ruleControlSwitchComposition19495 = new BitSet(new long[]{0x0230000000007E10L,0xFFFFE7C3C6000000L,0x00000000000203FFL});
    public static final BitSet FOLLOW_ruleExpression_in_ruleControlSwitchComposition19516 = new BitSet(new long[]{0x0020000000000000L});
    public static final BitSet FOLLOW_53_in_ruleControlSwitchComposition19529 = new BitSet(new long[]{0x0210800000007E10L,0xFFFFE7C3C6000000L,0x00000000000203FFL});
    public static final BitSet FOLLOW_ruleExpression_in_ruleControlSwitchComposition19551 = new BitSet(new long[]{0x0040000000000000L});
    public static final BitSet FOLLOW_47_in_ruleControlSwitchComposition19570 = new BitSet(new long[]{0x0210000000007E10L,0xFFFFE7C3C6000000L,0x00000000000203FFL});
    public static final BitSet FOLLOW_ruleExpressionList_in_ruleControlSwitchComposition19591 = new BitSet(new long[]{0x0001000000000000L});
    public static final BitSet FOLLOW_48_in_ruleControlSwitchComposition19603 = new BitSet(new long[]{0x0040000000000000L});
    public static final BitSet FOLLOW_54_in_ruleControlSwitchComposition19617 = new BitSet(new long[]{0x0000800000000000L});
    public static final BitSet FOLLOW_47_in_ruleControlSwitchComposition19629 = new BitSet(new long[]{0x2001000000000000L,0x0000000000000001L});
    public static final BitSet FOLLOW_ruleConditionBlock_in_ruleControlSwitchComposition19650 = new BitSet(new long[]{0x0001000000000000L,0x0000000000000001L});
    public static final BitSet FOLLOW_ruleDiscreteBlock_in_ruleControlSwitchComposition19672 = new BitSet(new long[]{0x0001000000000000L});
    public static final BitSet FOLLOW_48_in_ruleControlSwitchComposition19685 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleDiscreteBlock_in_entryRuleDiscreteBlock19722 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleDiscreteBlock19732 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_64_in_ruleDiscreteBlock19775 = new BitSet(new long[]{0x0000800000000000L});
    public static final BitSet FOLLOW_47_in_ruleDiscreteBlock19800 = new BitSet(new long[]{0x02919FFE20007E10L,0xFFFFE7C3C6000000L,0x000000000002F7FFL});
    public static final BitSet FOLLOW_ruleBlockStatement_in_ruleDiscreteBlock19821 = new BitSet(new long[]{0x02919FFE20007E10L,0xFFFFE7C3C6000000L,0x000000000002F7FFL});
    public static final BitSet FOLLOW_48_in_ruleDiscreteBlock19834 = new BitSet(new long[]{0x0000000020000002L});
    public static final BitSet FOLLOW_29_in_ruleDiscreteBlock19847 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleConditionBlock_in_entryRuleConditionBlock19885 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleConditionBlock19895 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_61_in_ruleConditionBlock19938 = new BitSet(new long[]{0x0000800000000000L});
    public static final BitSet FOLLOW_47_in_ruleConditionBlock19963 = new BitSet(new long[]{0x0211000000007E10L,0xFFFFE7C3C6000000L,0x00000000000203FFL});
    public static final BitSet FOLLOW_ruleConditionalExpression_in_ruleConditionBlock19985 = new BitSet(new long[]{0x0000000020000000L});
    public static final BitSet FOLLOW_29_in_ruleConditionBlock19997 = new BitSet(new long[]{0x0211000000007E10L,0xFFFFE7C3C6000000L,0x00000000000203FFL});
    public static final BitSet FOLLOW_48_in_ruleConditionBlock20011 = new BitSet(new long[]{0x0000000020000002L});
    public static final BitSet FOLLOW_29_in_ruleConditionBlock20024 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleDiscreteMethod_in_entryRuleDiscreteMethod20062 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleDiscreteMethod20072 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_37_in_ruleDiscreteMethod20109 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000001L});
    public static final BitSet FOLLOW_64_in_ruleDiscreteMethod20127 = new BitSet(new long[]{0x0010000000000000L});
    public static final BitSet FOLLOW_52_in_ruleDiscreteMethod20152 = new BitSet(new long[]{0x00401FF600000010L});
    public static final BitSet FOLLOW_ruleParameter_in_ruleDiscreteMethod20174 = new BitSet(new long[]{0x0060000000000000L});
    public static final BitSet FOLLOW_53_in_ruleDiscreteMethod20187 = new BitSet(new long[]{0x00001FF600000010L});
    public static final BitSet FOLLOW_ruleParameter_in_ruleDiscreteMethod20208 = new BitSet(new long[]{0x0060000000000000L});
    public static final BitSet FOLLOW_54_in_ruleDiscreteMethod20224 = new BitSet(new long[]{0x0000800000000000L});
    public static final BitSet FOLLOW_47_in_ruleDiscreteMethod20236 = new BitSet(new long[]{0x02919FFE20007E10L,0xFFFFE7C3C6000000L,0x000000000002F7FFL});
    public static final BitSet FOLLOW_ruleBlockStatement_in_ruleDiscreteMethod20257 = new BitSet(new long[]{0x02919FFE20007E10L,0xFFFFE7C3C6000000L,0x000000000002F7FFL});
    public static final BitSet FOLLOW_48_in_ruleDiscreteMethod20270 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleAbstractDiscreteMethod_in_entryRuleAbstractDiscreteMethod20306 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleAbstractDiscreteMethod20316 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_37_in_ruleAbstractDiscreteMethod20353 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000001L});
    public static final BitSet FOLLOW_64_in_ruleAbstractDiscreteMethod20371 = new BitSet(new long[]{0x0010000000000000L});
    public static final BitSet FOLLOW_52_in_ruleAbstractDiscreteMethod20396 = new BitSet(new long[]{0x00401FF600000010L});
    public static final BitSet FOLLOW_ruleParameter_in_ruleAbstractDiscreteMethod20418 = new BitSet(new long[]{0x0060000000000000L});
    public static final BitSet FOLLOW_53_in_ruleAbstractDiscreteMethod20431 = new BitSet(new long[]{0x00001FF600000010L});
    public static final BitSet FOLLOW_ruleParameter_in_ruleAbstractDiscreteMethod20452 = new BitSet(new long[]{0x0060000000000000L});
    public static final BitSet FOLLOW_54_in_ruleAbstractDiscreteMethod20468 = new BitSet(new long[]{0x0000000020000000L});
    public static final BitSet FOLLOW_29_in_ruleAbstractDiscreteMethod20480 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleInitMethod_in_entryRuleInitMethod20516 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleInitMethod20526 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_37_in_ruleInitMethod20563 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000010000L});
    public static final BitSet FOLLOW_144_in_ruleInitMethod20581 = new BitSet(new long[]{0x0010000000000000L});
    public static final BitSet FOLLOW_52_in_ruleInitMethod20606 = new BitSet(new long[]{0x0040000000000000L});
    public static final BitSet FOLLOW_54_in_ruleInitMethod20618 = new BitSet(new long[]{0x0000800000000000L});
    public static final BitSet FOLLOW_47_in_ruleInitMethod20630 = new BitSet(new long[]{0x02919FFE20007E10L,0xFFFFE7C3C6000000L,0x000000000002F7FFL});
    public static final BitSet FOLLOW_ruleBlockStatement_in_ruleInitMethod20651 = new BitSet(new long[]{0x02919FFE20007E10L,0xFFFFE7C3C6000000L,0x000000000002F7FFL});
    public static final BitSet FOLLOW_48_in_ruleInitMethod20664 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleAbstractInitMethod_in_entryRuleAbstractInitMethod20700 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleAbstractInitMethod20710 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_37_in_ruleAbstractInitMethod20747 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000010000L});
    public static final BitSet FOLLOW_144_in_ruleAbstractInitMethod20765 = new BitSet(new long[]{0x0010000000000000L});
    public static final BitSet FOLLOW_52_in_ruleAbstractInitMethod20790 = new BitSet(new long[]{0x0040000000000000L});
    public static final BitSet FOLLOW_54_in_ruleAbstractInitMethod20802 = new BitSet(new long[]{0x0000000020000000L});
    public static final BitSet FOLLOW_29_in_ruleAbstractInitMethod20814 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleNewByClass_in_entryRuleNewByClass20850 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleNewByClass20860 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_145_in_ruleNewByClass20897 = new BitSet(new long[]{0x0000000000000010L});
    public static final BitSet FOLLOW_RULE_ID_in_ruleNewByClass20917 = new BitSet(new long[]{0x0010000000000000L});
    public static final BitSet FOLLOW_52_in_ruleNewByClass20929 = new BitSet(new long[]{0x0250000000007E10L,0xFFFFE7C3C6000000L,0x00000000000203FFL});
    public static final BitSet FOLLOW_ruleExpression_in_ruleNewByClass20951 = new BitSet(new long[]{0x0060000000000000L});
    public static final BitSet FOLLOW_53_in_ruleNewByClass20964 = new BitSet(new long[]{0x0210000000007E10L,0xFFFFE7C3C6000000L,0x00000000000203FFL});
    public static final BitSet FOLLOW_ruleExpression_in_ruleNewByClass20985 = new BitSet(new long[]{0x0060000000000000L});
    public static final BitSet FOLLOW_54_in_ruleNewByClass21001 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleNewArray_in_entryRuleNewArray21037 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleNewArray21047 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_145_in_ruleNewArray21084 = new BitSet(new long[]{0x00001FF600000010L});
    public static final BitSet FOLLOW_ruleUseType_in_ruleNewArray21105 = new BitSet(new long[]{0x0200000000000000L});
    public static final BitSet FOLLOW_ruleDimExpr_in_ruleNewArray21126 = new BitSet(new long[]{0x0200000000000002L});
    public static final BitSet FOLLOW_ruleDimExpr_in_entryRuleDimExpr21163 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleDimExpr21173 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_57_in_ruleDimExpr21219 = new BitSet(new long[]{0x0210000000007E10L,0xFFFFE7C3C6000000L,0x00000000000203FFL});
    public static final BitSet FOLLOW_ruleExpression_in_ruleDimExpr21240 = new BitSet(new long[]{0x0400000000000000L});
    public static final BitSet FOLLOW_58_in_ruleDimExpr21252 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleDim_in_entryRuleDim21289 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleDim21300 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_146_in_ruleDim21337 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleAssignmentOperator_in_synpred1_InternalApricot6510 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleCastExpression_in_synpred2_InternalApricot8746 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleIdentifierSuffix_in_synpred3_InternalApricot9093 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleIdentifierSuffix_in_synpred4_InternalApricot9236 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_139_in_synpred5_InternalApricot18080 = new BitSet(new long[]{0x0000000000000002L});

}